错误 - 通过传递列表递归函数调用 - OCaml

时间:2010-11-27 22:53:10

标签: ocaml

我正在尝试创建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 个答案:

答案 0 :(得分:2)

要递归调用该函数,您需要使用let rec appendtolist而不是let appendtolist来定义它。

然后您会收到不同的错误,因为您的代码中还有其他错误......

答案 1 :(得分:1)

您收到“Unbound value appendtolist”错误,因为您在不声明为递归的情况下递归调用appendtolist

您需要编写let rec appendtolist n list = ...才能在其定义中递归地引用appendtolist

答案 2 :(得分:0)

我不太了解SML,但我认为你需要更多的parens,例如

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