以递归方式返回列表头部

时间:2013-07-13 16:01:08

标签: list prolog

我希望每次用户请求另一个值即List = [1, 2, 3]时返回列表的第一个元素,当程序执行时,它返回1,但是,当;是按下(用户要求另一个值)然后返回2,依此类推,直到列表为空。

虽然我已设法一次列出所有值,但关键问题是,我如何等待并让用户决定是否需要其他值。

2 个答案:

答案 0 :(得分:2)

这样做:

member( X, List ).

这将枚举每个List;的下一个成员。对谓词的每次调用都将在List中实例化X的下一个成员,直到所有成员都用完为止。

答案 1 :(得分:1)

是的,有一个内置函数可以做到这一点,但我认为你应该尝试自己编写它以更好地理解Prolog。

each_one([A|_],A).

列表中的一个元素是它的头元素。

each_one([_|B],X):- each_one(B,X).

更多元素在列表的尾部。这是递归条款。

空列表中没有元素,所以我们不写任何内容(尽管我们可以写each_one([],_):- fail.具有相同的效果)。

现在你可以尝试一下:

4 ?- each_one([1,2,3],X).
X = 1

Prolog向您展示了第一个解决方案并等待您的回复。您按';'继续:

      ;
X = 2 ;
X = 3 ;
false.