2010-02-05 4 views
1

je créer une fonction sur les numéros de Peano définis comme le type de données suivant:fonction standard ml de problème de type de données

datatype 'a peano = P of ('a -> 'a) * 'a -> 'a 
val zero = P(fn (f, x) => x) 

La fonction que je suis à mettre en oeuvre trouve le nombre successif de Peano du paramètre de Peano P(p). Voilà ce que je l'ai écrit:

fun suc (P(p)) = case P(p) of P(fn(f,x)=>x) => P(fn(f,x)=>f(x)); 

Le problème est que je reçois ces erreurs:

stdIn:4.33-4.36 Error: syntax error: deleting FN LPAREN 
stdIn:4.43 Error: syntax error found at RPAREN 

Je ne sais pas ce que Im faire le mal. S'il vous plaît aider!

Répondre

1

Il existe un certain nombre de problèmes dans ce code. Celui que le compilateur pleurnicher est que vous avez une définition de fonction

fn (f,x) => x 

sur le côté gauche d'un bras case, où seuls modèles sont autorisés.

D'autres problèmes:

  1. parenthèses redondantes font le code difficile à lire (advice is available sur les enlever).
  2. Votre expression case est redondante; dans la définition de la fonction

    fun suc (P p) = ... 
    

    il devrait être possible juste pour calculer avec p sans plus d'analyse de cas.

  3. Depuis P porte une fonction, vous aurez probablement un temps plus facile si vous écrivez

    fun suc (P f) = ... 
    

    et assurez-vous que le résultat, f est appliqué à une paire (tel que requis par les déclarations de type de données) .

Questions connexes