gpt4 book ai didi

math - 元组的 Prolog 算术

转载 作者:行者123 更新时间:2023-12-01 04:46:40 31 4
gpt4 key购买 nike

想法如下:假设我有一个列表 P = [(1,0),(4,3)] 或类似的列表。我想以以下方式计算此列表定义的多项式:1X^0 + 4X^3

为此,我编写了以下内容:

evaluate(P,X,Y) :- evaluate(P,X,Y,0).
evaluate([],_,S,S).
evaluate([P1,P2|Ps],X,Y,S) :-
S1 is S+P1*X^P2,
evaluate(Ps,X,Y,S1).

Y 是多项式 P 的总和(给定 x=X)时,应该会成功。

问题是,当我尝试运行此代码时,出现错误:

is/2: Arithmetic: `(',')/2' is not a function

但我不知道这是从哪里来的,也不知道如何解决它。

我确实尝试将 S1 分成几个部分,但这样做没有帮助。

编辑:好的,我发现这与列表的书写方式有关。如何在 Prolog 范围内以这种方式处理元组?

最佳答案

您的问题是,正如您所指出的,列表中每个项目的数据结构都是一个元组,并且您访问列表中元组值的位置不正确。

这个

evaluate([P1,P2|Ps],X,Y,S) :-

应该是

evaluate([(P1,P2)|Ps],X,Y,S) :-

注意 P1、P2 周围的括号。

当我运行时得到的改变

?- evaluate([(1,0),(4,3)],5,Y).
Y = 501.

通常将输出参数放在末尾,

evaluate_01(P,X,Y,0).

作为

evaluate_01(P,X,0,Y).

然后根据需要更改其他谓词。

evaluate_02(P,X,Y) :- evaluate_02(P,X,0,Y).
evaluate_02([],_,S,S).
evaluate_02([(P1,P2)|Ps],X,S,Y) :-
S1 is S+P1*X^P2,
evaluate_02(Ps,X,S1,Y).

关于math - 元组的 Prolog 算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49426820/

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