вложенные операторы if - else -ocaml - PullRequest
1 голос
/ 29 ноября 2010

можем ли мы выполнить несколько операций внутри нашего цикла if-else в ocaml?

Я пытаюсь сделать следующее:

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)) (* THIS LINE *)

        else ((appendtocode n (List.hd list)) :: (appendtolist n (List.tl list) (b-1)) )

    in

    f list

    ;;

Я получаю жалобу от компилятора в строкекоторый я выделил жирным шрифтом, что:

Это выражение не является функцией, оно не может быть применено

Я хочу вызвать мою функцию, когда b==0, а также уменьшить значение b.

Как я мог это сделать в этом случае?

Пожалуйста, сообщите.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 29 ноября 2010

Это в основном та же ошибка, что и до .

Вы оцениваете

appendtocode n (List.hd list)

, которое возвращает значение, которое не функция. Затем вы пытаетесь вызвать его с b-1 в качестве аргумента, но так как это не функция, вы не можете этого сделать.

Я хочу вызвать мою функцию, когда b == 0, а также уменьшить значение b.

Декремент b для кого? b является аргументом функции appendtolist, поэтому, если вы вызываете appendtolist рекурсивно, вы можете указать новый аргумент для b, что вы и делаете в случае else, и это прекрасно работает , Но в случае then вы не звоните appendtolist. Вы звоните только appendtocode, а appendtocode не имеет третьего аргумента b. Так что проходить его b-1 просто не имеет смысла.

Я предполагаю, что ваша программа будет работать нормально, если вы удалите b-1.

PS: эта проблема совершенно не связана с вложенными if с.

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

Быстрое предположение:

Выражение, заданное как

( appendtocode n (List.hd list) )

, возвращает что-то, что не является функцией, и, следовательно, вы не можете применить к нему значение (b-1)это то, что вы пытаетесь сделать.Чтобы проверить, вы можете посмотреть тип appendtocode и увидеть, что он может принимать два или три аргумента карри.

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