Prolog字符串列表乘积,无法计算递归
Prolog character string list product, can't figure out recursion
一个product/3
one_product(+非终结符,+单元格,-乘积)
这是我得到的最接近的,但我无法让字符串与尾部相乘。我已经为此研究了整整一周。
conca(String,[H|T],Product) :-
string_concat(String,H,Combined),
append([Combined],T,Product).
one_product(String,Cell,Product) :-
conca(String,Cell,Product).
我得到
?- one_product("A",["B","C"],What).
What = ["AB", "C"].
另一次尝试的一部分。
Product = String * H.
这些是单例尝试。
conca([],[_],Product) :-
Product = [].
conca(String,[],Product) :-
Product = [].
这些是例子
?- one_product([],["B"],What).
What = [].
?- one_product("A",["B"],What).
What = ["AB"].
?- one_product("A",["B","C"],What).
What = ["AB", "AC"].
?- one_product("A",[],What).
What = [].
您还会注意到带有空单元格的产品是空的。
你不会不想使用 append/3
这样的东西。你想要一个递归列表过程:
one_product(_, [], []).
one_product(String, [H|T], [StringH|StringT]) :-
string_concat(String, H, StringH),
one_product(String, T, StringT).
这是 Prolog 中的常见模式,可以使用 maplist/3
:
完成
one_product(String, StringList, Product) :-
maplist(string_concat(String), StringList, Product).
这会将字符串 String
与列表 StringList
的每个字符串元素连接(添加)到列表 Product
.
现在,上面唯一的问题是你的情况:
one_product([],["B"],What).
本例使用列表作为第一个参数,而不是字符串。这是意图吗?如果有,可以单独对待:
one_product([], _, []).
one_product(String, StringList, Product) :-
string(String),
maplist(string_concat(String), StringList, Product).
一个product/3 one_product(+非终结符,+单元格,-乘积)
这是我得到的最接近的,但我无法让字符串与尾部相乘。我已经为此研究了整整一周。
conca(String,[H|T],Product) :-
string_concat(String,H,Combined),
append([Combined],T,Product).
one_product(String,Cell,Product) :-
conca(String,Cell,Product).
我得到
?- one_product("A",["B","C"],What).
What = ["AB", "C"].
另一次尝试的一部分。
Product = String * H.
这些是单例尝试。
conca([],[_],Product) :-
Product = [].
conca(String,[],Product) :-
Product = [].
这些是例子
?- one_product([],["B"],What).
What = [].
?- one_product("A",["B"],What).
What = ["AB"].
?- one_product("A",["B","C"],What).
What = ["AB", "AC"].
?- one_product("A",[],What).
What = [].
您还会注意到带有空单元格的产品是空的。
你不会不想使用 append/3
这样的东西。你想要一个递归列表过程:
one_product(_, [], []).
one_product(String, [H|T], [StringH|StringT]) :-
string_concat(String, H, StringH),
one_product(String, T, StringT).
这是 Prolog 中的常见模式,可以使用 maplist/3
:
one_product(String, StringList, Product) :-
maplist(string_concat(String), StringList, Product).
这会将字符串 String
与列表 StringList
的每个字符串元素连接(添加)到列表 Product
.
现在,上面唯一的问题是你的情况:
one_product([],["B"],What).
本例使用列表作为第一个参数,而不是字符串。这是意图吗?如果有,可以单独对待:
one_product([], _, []).
one_product(String, StringList, Product) :-
string(String),
maplist(string_concat(String), StringList, Product).