如何从左到右获取列表的乘积? 例如:
?- product([1,2,3,4], P).
P = [1, 2, 6, 24] .
我认为一种方法是重载仿函数并使用 3 个参数:
product([H|T], Lst) :- product(T, H, Lst).
我不确定从这里到哪里去。
最佳答案
您可以使用此处找到的库 (lambda):http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/lambda.pl 完全不可读:
:- use_module(library(lambda)).
:- use_module(library(clpfd)).
product(L, R) :-
foldl(\X^Y^Z^(Y = []
-> Z = [X, [X]]
; Y = [M, Lst],
T #= X * M,
append(Lst, [T], Lst1),
Z = [T, Lst1]),
L, [], [_, R]).
感谢@Mike_Hartl 的建议,代码非常简单:
product([], []).
product([H | T], R) :-
scanl(\X^Y^Z^( Z #= X * Y), T, H, R).
关于prolog - 从左到右获取列表的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15146810/