real
не является типом равенства в ML, и поэтому ни один из полиморфных типов, построенных из real
S - в частности, real list
S не типы равенства, и поэтому вы не можете использовать оператор =
сравнить два real list
S, даже если эти списки пусты. Вместо этого вам нужно соответствовать шаблону. Например,
fun reverse [] = []
| reverse (x::xs) = (reverse xs) @ [x]
или же
fun reverse [] = []
| reverse (x::xs) = case xs of
[] => [x]
| _ => (reverse xs) @ [x]
будет работать даже для некачественных типов.
(Поочередно, используйте встроенную функцию List.rev
.)