关于列表的Prolog程序

时间:2017-09-11 19:25:50

标签: prolog

我是Prolog的新程序员,我尝试做一个程序,说:制作谓词penta(X),其中X是一个列表,并在{{1}时返回true有5个连续的元素,其中:第一个元素是第一个和第二个元素之和。另外,第三个元素是第5个和第4个之间的差异,例如:X

所以我这样做了:

X = [ ... 5, 7, 12, 18, 30, ... ]

这实际上没有编译,所以它还没有工作。如果你愿意,请告诉我它有什么问题。

非常感谢你。

1 个答案:

答案 0 :(得分:3)

在prolog中,我们编写谓词而非函数。谓词定义了一组规则,该规则将对实例化变量集成功或失败。因此,如果penta(X)是包含符合条件的5个连续元素的列表,那么您需要成功的谓词X

从顶部开始。符合条件的5个连续元素位于列表的开头,或者它们位于列表的后面。

% Succeed if the first 5 elements meets the criteria
penta([A, B, C, D, E |_]) :-
    ... % what goes here for this to succeed?

% Succeeds if the rest of the list succeeds, without the first element
penta([_|T]) :- penta(T).

我认为这是你需要的唯一两条规则。您查询的任何其他与此不匹配的内容将默认失败,这是您想要的。您无需检查0到4长度情况的长度。这些案例将不符合上述谓词。

你会注意到,根据你如何实现上述内容,它可能会成功几次。也就是说,它可能会找到多个解决方案。您需要确定这是否是您想要的,或者您是否希望它在一个解决方案后停止。我会把它作为进一步的练习。