Вложенная, если - ошибка в цикле - ocaml - PullRequest
1 голос
/ 29 ноября 2010

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

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

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 Ответ

1 голос
/ 29 ноября 2010

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

appendtocode n (List.hd list)

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

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

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

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

PS: если операторы не являются циклами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...