Я пытаюсь обратить список в SML со следующей реализациейSML: Тип умозаключение дает странные ошибки во время добавления элемента в список
fun reverse x y =
case x of
[] => y
| x::xs => reverse(xs, x::y)
;
сообщения об ошибках, которые я получаю непроницаема:
trial.sml:1.6-4.35 Error: case object and rules don't agree [tycon mismatch]
rule domain: 'Z list * 'Z list
object: ('Z list * 'Z list) * 'Y
in expression:
(case (arg,arg)
of (x,y) =>
(case x
of nil => y
| :: <pat> => reverse <exp>))
trial.sml:1.6-4.35 Error: right-hand-side of clause doesn't agree with function result type [tycon mismatch]
expression: 'Z -> _
result type: 'Y list
in declaration:
reverse = (fn arg => (fn <pat> => <exp>))
Однако, если я сменил подпись на обратную (x: 'список, y:' список) , тогда это работает, почему это так? Есть ли способ написать это, так что мне не нужно писать тип «список»?
oh !! noo im не собирался писать футлярную функцию, я вижу, почему она запутывается. Я не знал, что скобки и запятые сделали разницу. Спасибо за вашу помощь. – Har