real
não é um tipo de igualdade em ml e, portanto, os tipos polimórficos não são construídos a partir de real
s - em particular, real list
S não são tipos de igualdade e, portanto, você não pode usar o operador =
para comparar dois real list
S, mesmo que essas listas estejam vazias. Em vez disso, você precisa corresponder ao padrão. Por exemplo,
fun reverse [] = []
| reverse (x::xs) = (reverse xs) @ [x]
ou
fun reverse [] = []
| reverse (x::xs) = case xs of
[] => [x]
| _ => (reverse xs) @ [x]
funcionará mesmo para tipos de não qualidade.
(Alternadamente, use a função embutida List.rev
.)