[英]Storing results in a list in Prolog
我正在尝试计算算术计算并将结果存储在Prolog中的新列表中。 函数原型如下:
calculation(List1, ListofLists, ResultList)
对于第一个参数,我提供了一个列表,第二个参数是列表列表,第三个是结果列表。 我使用每个列表列表计算第一个参数列表,并将结果存储在结果列表中。 那么有人可以告诉我如何将结果存储在结果(空)列表中?
使用库lambda,你可以写:
:- use_module(library(lambda)).
:- use_module(library(clpfd)).
calculation(L1, L2, Compute, L) :-
maplist([L2,Compute] +\X^Y^call(Compute,L2, X, Y), L1, L).
% my_compute succeeds when R is the list of all the products
% of the numbers component of L with the number V
my_compute(L, V, R) :-
maplist(V +\X^Y^maplist(V +\Z^T^(T #= Z * V), X, Y), L, R).
这是一个例子:
?- calculation([1,2,3], [[4,5],[6,7]], my_compute, Zss).
Zss = [[[4, 5], [6, 7]], [[8, 10], [12, 14]], [[12, 15], [18, 21]]].
?- Zss = [[[4,5],[6,7]],[[8,10],[12,14]],[[12,15],[18,21]]],
calculation(Xs, [[4,5],[6,7]], my_compute, Zss).
Xs = [1, 2, 3].
?- Zss = [[[4,5],[6,7]],[[8,10],[12,14]],[[12,15],[18,21]]],
calculation([1,2,3], Xss, my_compute, Zss).
Xss = [[4, 5], [6, 7]].
calculation([], [], []). calculation([X|Xs], [Y|Ys], [Z|Zs]) :- calculate(X, Y, Z), calculation(Xs, Ys, Zs).
这与:
calculation(X, Y, Z) :- maplist(calculate, X, Y, Z).
无论哪种方式,你需要一个谓词calculate/3
,它取第一个参数,列表列表作为第二个参数,并计算结果。 例如,将第二个参数中的列表相加并将其乘以第一个参数:
calculate(X, Ys, Z) :- list_sum(Ys, S), Z is X * S.
如果我理解正确,您希望对List1
和ListofLists
每个成员进行一些计算,并获得结果列表。
您可以使用findall执行此操作:
calculation(List1, ListofLists, ResultList) :-
findall(Result, (
member(List2, ListofLists),
your_computation(List1, List2, Result)
), ResultList).
例如,如果用append
替换your_compuation
,则得到:
?- calculation([a,b],[[c,d],[e,f,g],[h]],X).
X = [[a, b, c, d], [a, b, e, f, g], [a, b, h]].
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.