呃,
我正在尝试通过 ocaml 和 CYK 表来学习函数式编程,因此没有 List.mem 或任何命令式函数。我的目标是形成 2 个细胞的产物。
这是我目前拥有的:
let stringlister = function(mystring, newlist) ->
List.append newlist mystring;;
let rec append_func = function([listleft;listright], anslist, i, j) ->
if (j == (List.length listright)) then anslist
else begin
append_func([listleft;listright], anslist, i, j + 1);
List.append(anslist (stringlister((List.nth listright j), (stringlister( (List.nth listleft i), [])))))
end;;
let rec prod_func = function([listleft;listright], anslist, i, j) ->
if (i == (List.length listleft)) then anslist
else begin
prod_func([listleft;listright], anslist, i + 1, j);
append_func([listleft;listright], anslist, i, j)
end;;
let product = function[listleft;listright] ->
if (listleft == [] || listright == []) then []
else prod_func([listleft;listright], [], 0, 0);;
预期的输出应该是这样的:
#product[["A";"B"];["D","E","F","G"]];;
-: string list = ["AD"; "AE"; "AF"; "AG"; "BD"; "BE"; "BF"; "BG"]
#product[["A","B"];[]];;
-: string list = []
我的想法是制作一系列递归函数,基本上循环遍历列表,将每个字符串与另一个列表中的每个字符串放在一起。
我认为我的错误是我的附加方式,特别是在 append_func 中。我认为要问的更好的问题可能是如何创建字符串列表。