gpt4 book ai didi

prolog - 从左到右获取列表的产品

转载 作者:行者123 更新时间:2023-12-02 08:42:44 25 4
gpt4 key购买 nike

如何从左到右获取列表的乘积?例如:

?- 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com