Ошибка - рекурсивные вызовы функций путем передачи списков - OCaml - PullRequest
1 голос
/ 28 ноября 2010

Я пытаюсь создать перестановки строк, содержащихся в списке в OCaml. До сих пор я работал над следующим фрагментом кода, но столкнулся с проблемой передачи первой строки списка моему методу.

Логика для кода: Выполните итерацию для каждого элемента списка и добавьте каждый элемент с элементом списка. Продолжайте, пока все элементы не будут добавлены в список в каждой возможной позиции.

Код:

(* this function appends each string to each word in the list example: "A" with "ABC" *)
let appendtocode n word =
    let f x = n ^ x in
    f word    
;;

(* this function extracts every element of the list and appends it with the string.
Example: "A" with ["AAA","ABC","ACD"] etc.. *)
let appendtolist n list =
    let f x =
        if (List.length list) > 0 then list
        else ((appendtocode n (List.hd list)) ^ (appendtolist n (List.tl list)) ) 
    in
    List.map f list
;;

Ошибка:

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

несвязанное значение appendtolist

Происходит при вызове: (appendtolist n List.tl list)

Мой список состоит только из строк. Я все еще работаю над кодом. Но застрял на этом из-за этой ошибки.

Пожалуйста, помогите !!! Любой вклад был бы великолепен.

Ответы [ 3 ]

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

Чтобы вызвать функцию рекурсивно, вам нужно определить ее с помощью let rec appendtolist, а не просто let appendtolist.

Затем вы получите другую ошибку, потому что в вашем коде есть другие ошибки ...

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

Вы получаете сообщение об ошибке «Unbound value appendtolist», потому что вы вызываете appendtolist рекурсивно, не объявляясь рекурсивным.

Вам нужно написать let rec appendtolist n list = ..., чтобы иметь возможность рекурсивно ссылаться на appendtolist в его определении.

0 голосов
/ 28 ноября 2010

Я не очень хорошо знаю SML, но думаю, вам нужно еще несколько паренов, например

else ((append-to-code n List.hd list) ^ (append-to-list n List.tl list) ) 

должно быть

else ((append-to-code n (List.hd list)) ^ (append-to-list n (List.tl list)) ) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...