首页 > 解决方案 > 输出似乎只测试列表中最后一个的差异函数

问题描述

链接到旧问题:检查连续元素之间的差异是否相同

我已经在另一个问题帖子中发布了我的进度,但这是我的代码我试图在 Prolog 中解决的问题。我希望我的函数返回 sameSeqDiffs([3,5,7],2) 的结果,具体取决于每个数字之间的差异是否与我的最后一个参数相同。到目前为止,这是我的想法:

sameSeqDiffs([X,Y], Result):-
    A is Y - X,
    A = Result.

sameSeqDiffs([X,Y,Z|T], Result):-
    sameSeqDiffs([Y,Z|T], Result).

当我测试这段代码时,它似乎适用于某些输入,但显然不适用于其他输入:

在此处输入图像描述

标签: listrecursionprolog

解决方案


您的解决方案存在一些问题:

sameSeqDiffs([X,Y,Z|T], Result):-
    sameSeqDiffs([Y,Z|T], Result).

在这里,您完全忽略了变量 X 和差异 XY。

sameSeqDiffs([X,Y], Result):-
    Result is Y - X.

sameSeqDiffs([X,Y,Z|T], Result):-
    Result is Y - X,
    sameSeqDiffs([Y,Z|T], Result).

推荐阅读