繁体   English   中英

将结果存储在Prolog中的列表中

[英]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.

如果我理解正确,您希望对List1ListofLists每个成员进行一些计算,并获得结果列表。

您可以使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM