2010-11-28 1 views
1

Я пытаюсь разработать несколько циклов if-else для моего кода.nested if -else loop error - ocaml

Мой предыдущий код был:

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 
    ;; 

Модифицированный код с вложенными циклами:

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 
    ;; 

Но я получаю эту ошибку:

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

Мой код кажется синтаксически правильным. Является ли это правильным способом реализации вложенного цикла в OCaml? Я последовал примеру, когда цикл if-elseif нашел онлайн, который работал нормально.

Мне нужно, наконец, вывести x, который является списком, сформированным после всех рекурсивных вызовов appendtocode и appendtolist в этой функции.

Я что-то не так!

Просим руководствоваться.

спасибо.

ответ

1

В своем первом примере кода вы звоните appendtocode так:

appendtocode n (List.hd list) 

Так я предполагаю, что appendtocode функция принимает 2 аргумента.

Во втором вы вызываете это так:

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

Так вот вы вызываете его с 3-мя аргументами. Поскольку это занимает всего два, вы получаете сообщение об ошибке, сообщающее вам, что вы вызываете его со слишком большим количеством аргументов.

PS: Если утверждения не являются петлями.

+0

привет. Благодарю. не понимал синтаксической ошибки. Я переписал всю проблему в новом посте. вместо того, чтобы переписывать его здесь. еще раз спасибо. – JJunior 2010-11-28 21:26:30

 Смежные вопросы

  • Нет связанных вопросов^_^