real
n'est pas un type d'égalité en ML, et donc les types polymorphes ne sont donc pas non plus construits à partir de real
s - en particulier, real list
S ne sont pas des types d'égalité, et vous ne pouvez donc pas utiliser l'opérateur =
Pour comparer deux real list
S, même si ces listes sont vides. Au lieu de cela, vous devez correspondre à des motifs. Par exemple,
fun reverse [] = []
| reverse (x::xs) = (reverse xs) @ [x]
ou
fun reverse [] = []
| reverse (x::xs) = case xs of
[] => [x]
| _ => (reverse xs) @ [x]
fonctionnera même pour les types non quantitatifs.
(Alternativement, utilisez la fonction intégrée List.rev
.)