gpt4 book ai didi

list - 如何对 Prolog 列表的元素执行算术运算

转载 作者:行者123 更新时间:2023-12-03 22:09:35 24 4
gpt4 key购买 nike

背景

整数系数列表可用于表示多项式(在 X 中)。例如,1 + 3x + 3x^2 + 2x^3 表示为 [1,3,3,2]。

设 P 为这些列表之一。

我需要编写采用这些系数的公理,并用它们做不同的事情。

示例: 关系 eval(P,A,R) 的公理,其中 R 是在 X = A 时对 P 表示的多项式求值的结果(期望 P 和 A 被完全实例化) .例如,eval([3,1,2],3,R) 生成 R=24。 (这是因为 3(3)^0 + 1(3)^1 + 2(3)^2 = 3 + 3 + 18 = 24)。

Prolog tutorial讨论递归地搜索列表:“它查看列表中的第一项是否是第一项。如果是,我们就成功了。如果不是,那么我们将丢弃列表中的第一项并查看其余项”。

on(Item,[Item|Rest]).  

on(Item,[DisregardHead|Tail]):-

on(Item,Tail).

问题

这段代码如何丢弃列表中的第一项?

那么问题就变成了,一旦我找到它,我该如何使用它来进行如上所述的计算?

最佳答案

How does this code throw away the first item in the list?

通过在列表的尾部递归调用 on,您将忽略第一个元素。由于您不会使用它,因此您应该将其称为 _ 而不是 DisregardHead(一些编译器会警告您注意“单例变量”)。

once I've found it, how do I use it to calculate as described above?

好吧,on 应该返回多个结果 - 每个匹配项一个 - 而您的目标是获得一个考虑了整个列表的单个 结果。所以你不应该忽略第一个元素,而是将它合并到结果中。示例:

my_pred([],0).
my_pred([Item|Tail],Result) :-
my_pred(Tail,IntermResult),
combine(Item,IntermResult,Result). % Ex.: Result is Item + IntermResult

我没有给出完整的代码,因为您似乎还在学习,但如果您愿意,可以这样做。这也是一个非常简单的例子,并没有优化(即没有尾递归)。

附加提示:如果您以这种方式表达您的多项式,应该清楚如何进行递归计算:

1 + x * (3 + x * (3 + x * (2 + x * 0)))

关于list - 如何对 Prolog 列表的元素执行算术运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15047449/

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