Je suis en train d'inverser une liste SML avec la mise en œuvre suivanteSML: inférence de type donnant étrange erreur tout en ajoutant un élément à une liste
fun reverse x y =
case x of
[] => y
| x::xs => reverse(xs, x::y)
;
Les messages d'erreur que je reçois est impénétrable:
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>))
Toutefois, si je change la signature pour être amusant inverse (x: 'une liste, y:' une liste) alors ça marche pourquoi est-ce le cas? Y at-il un moyen d'écrire ceci afin que je n'ai pas besoin d'écrire le type 'une liste?
oh !! Noo im wasnt intention d'écrire une fonction curry Je vois pourquoi il devient confus. Je ne savais pas que les accents et les virgules faisaient la différence. Merci de votre aide. – Har