2010-11-28 48 views
1

Je suis en train d'essayer une boucle if-else multiple pour mon code.imbriqué si -else erreur de boucle - ocaml

Mon code précédent était:

let rec appendtolist n list b = 
    let f x = 
     if (b == 0) then x 
     else (append (appendtocode n (List.hd list)) (appendtolist n (List.tl list) (b-1))) 
    in 
     f list 
    ;; 

Code modifié avec des boucles imbriquées:

let rec appendtolist n list b = 
    let f x = 
     if b < 0 then x 
     else if (b == 0) then appendtocode n (List.hd list) (b-1) 
     else appendtocode n (List.hd list) :: appendtolist n (List.tl list) (b-1) 
    in 
     f list 
    ;; 

Mais je reçois cette erreur:

This function is applied to too many arguments, maybe you forgot a `;' 

Mon code semble être syntaxiquement correct. Est-ce la bonne façon d'implémenter une boucle imbriquée dans OCaml? J'ai suivi un exemple pour la boucle if-elseif trouvée en ligne qui a bien fonctionné.

Je dois enfin sortir x qui est la liste formée après tous les appels récursifs à appendtocode et appendtolist dans cette fonction.

Est-ce que je vais mal n'importe où?

S'il vous plaît guider.

Merci.

Répondre

1

Dans votre premier exemple de code que vous appelez appendtocode comme ceci:

appendtocode n (List.hd list) 

Je suppose que appendtocode est une fonction qui prend 2 arguments.

Dans la seconde vous l'appelez comme ceci:

appendtocode n (List.hd list) (b-1) 

donc ici que vous appelez avec 3 arguments. Comme il n'en faut que deux, vous obtenez un message d'erreur vous indiquant que vous l'appelez avec trop d'arguments.

PS: si les instructions ne sont pas des boucles.

+0

hi. Merci. n'a pas réalisé l'erreur syntaxique. J'ai republié l'ensemble du problème dans un nouveau message. au lieu de l'écraser ici. Merci encore. – JJunior