J'ai une mission où je dois mettre en œuvre des chiffres de l'église en utilisant le SML datatype: datatype 'une église = C (' un -'A) * 'a ->' aSML et les chiffres église
I avoir à écrire la fonction créer: int -> « une église et une fonction churchToint jusqu'à présent, j'ai le code suivant:
datatype 'a church = C of ('a -> 'a) * 'a -> 'a
val ZERO = C(fn (f,x) => x)
fun subCreate 0 (f,x) = x
| subCreate n (f,x) = f (subCreate (n-1) (f,x))
fun create n = C(fn (f,x) => subCreate n (f,x));
fun churchToInt cn = cn (fn x => x + 1) 0;
Je sais que je suis assez proche. Pouvez-vous s'il vous plaît m'aider à mettre en œuvre correctement? Merci
Je l'ai fait cependant est toujours get churchToInt: int église -> int au lieu de 'une église. Et en plus, quand je cours par exemple: créer 5; J'obtiens: "Les voitures de type avertissement non généralisées à cause de la restriction de valeur sont instanciées aux types factices (X1, X2, ....) val it = C fn:? .X1 église" – duby12
@tester: Bien sûr le type est ' int église -> int'. Si le type était '' a church -> int', vous ne seriez pas autorisé à passer une fonction de type 'int -> int'. Si l'affectation vous oblige vraiment à définir une fonction de type ''une église -> int', j'ose dire qu'elle n'est pas soluble - du moins pas avec la définition de type donnée. – sepp2k
mais qu'en est-il de la fonction create, je veux dire que ça marche par exemple churchToInt (create 5) renvoie 5 mais à chaque fois que je lance create, ça continue de me donner cette étrange erreur – duby12