real
non è un tipo di uguaglianza in ml, e quindi nemmeno i tipi polimorfici sono costruiti real
s - in particolare, real list
s non sono tipi di uguaglianza e quindi non è possibile utilizzare l'operatore =
per confrontare due real list
s, anche se quelle liste sono vuote. Invece, è necessario abbinare il pattern. Per esempio,
fun reverse [] = []
| reverse (x::xs) = (reverse xs) @ [x]
o
fun reverse [] = []
| reverse (x::xs) = case xs of
[] => [x]
| _ => (reverse xs) @ [x]
funzionerà anche per tipi di non qualità.
(In alternativa, utilizzare la funzione integrata List.rev
.)