Math Prolog公共差分,多项式序列中的下一个数
我正在尝试实现一个简单的算法来解决共同的差异(http://www.purplemath.com/modules/nextnumb.htm)在Prolog中(我是新手),我似乎很难想出正确的规则。 我有: 问题似乎出现在我的下一项中,(感觉我应该在下一项中的某个地方进行递归调用,但可能不是?) 例如: 下面的行([6,7,14,33],X)。 生成正确的[1,7,19](对于多边形x^3+6) 但下一个项目不会产生70 跟踪看起来好像我在下一项中调用下面的行是错误的,我想我错过了一个递归调用来继续移动到该行Math Prolog公共差分,多项式序列中的下一个数,math,prolog,Math,Prolog,我正在尝试实现一个简单的算法来解决共同的差异(http://www.purplemath.com/modules/nextnumb.htm)在Prolog中(我是新手),我似乎很难想出正确的规则。 我有: 问题似乎出现在我的下一项中,(感觉我应该在下一项中的某个地方进行递归调用,但可能不是?) 例如: 下面的行([6,7,14,33],X)。 生成正确的[1,7,19](对于多边形x^3+6) 但下一个项目不会产生70 跟踪看起来好像我在下一项中调用下面的行是错误的,我想我错过了一个递归调用来继
你知道如何修正nextitem规则吗??非常感谢您的帮助,因为我大概花了20个小时来处理这个问题,而且它还没有“点击”…您的
nextitem
规则中有一个输入错误,NextI
应该区分大小写,并且您在定义中有它作为NextI
。另外,是否需要在[Z]
周围使用列表括号,下面的行将生成该操作数的列表,因此不需要它们。因此,你最终会:
nextitem([A|B], NextI):-lastitem([A|B],X),
rowbelow([A|B],Z),lastitem(Z,Y), NextI is X+Y.
nextitem([],0).
有了它,nextitem([6,7,14,33],X)
将产生X=52
,这是您现有的逻辑给出的结果
追溯:
lastitem([6,7,14,33],X)
将使X=33
下面的行([6,7,14,33],Z)
将给出Z=[1,7,19]
lastitem([1,7,19],Y)
makesY=19
NextI为33+19
给出NextI=52
您只是在计算第一级差异,为了获得x^3+6
序列中的下一个条目,正如您所说的70,您需要在上一个值(33)上加37,这是上一级差异,19加18,这是由下一级的nextitem
给出的,即[6,12]
目标是递归定义,正如示例网站所示,有必要降低到差异恒定的级别
在你的情况下,你可以得到一个一致的6
重新定义您的nextitem
规则以处理rowbelow
返回的列表将产生您想要的结果,而且单身列表还需要一个额外的规则,因为您没有涵盖这种可能性
nextitem([A|B], NextI):-lastitem([A|B],X), rowbelow([A|B],Z), nextitem(Z,Y), NextI is X+Y.
nextitem([A],A).
nextitem([],0).
我不明白你想计算什么。但这里有一些注释:nextI在nextitem中拼写错误(应该是nextI)。同样,当你调用rowDown时,它应该是rowDown([A | B],Z),而不是rowDown([A | B],[Z])。RowDown的第二个子句我认为应该是RowDown([[u],]),因为它是基本情况
nextitem([A|B], NextI):-lastitem([A|B],X), rowbelow([A|B],Z), nextitem(Z,Y), NextI is X+Y.
nextitem([A],A).
nextitem([],0).