一件产品/ 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 = [].
您还会注意到一个空单元格的产品是空的。
答案 0 :(得分:0)
您不希望将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).