我正在尝试创建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)
我的列表只包含字符串。 我还在研究代码。但由于这个错误而坚持下去。
请帮忙!!!任何输入都会很棒。
答案 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)) )