Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math Prolog公共差分,多项式序列中的下一个数_Math_Prolog - Fatal编程技术网

Math Prolog公共差分,多项式序列中的下一个数

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 跟踪看起来好像我在下一项中调用下面的行是错误的,我想我错过了一个递归调用来继

我正在尝试实现一个简单的算法来解决共同的差异(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)
    makes
    Y=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).