1

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

虽然我设法一次列出了所有值,但这里的关键问题是,我如何才能等待并让用户决定他是否想要另一个值。

4

2 回答 2

2

只需这样做:

member( X, List ).

List这将枚举每个的下一个成员;List对谓词的每次调用都会实例化in的下一个成员,X直到所有成员都用尽。

于 2013-07-13T16:05:26.187 回答
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.
于 2013-07-15T14:14:37.927 回答