我想每次用户请求另一个值时返回列表的第一个元素,即List = [1, 2, 3]
,当程序执行时它返回1
,但是,当按下;
(用户请求另一个值值),则返回2
等等,直到列表为空。返回列表递归序言
尽管我已经设法一次列出所有值,但这里的关键问题是,我该如何等待并让用户决定他是否想要另一个值。
我想每次用户请求另一个值时返回列表的第一个元素,即List = [1, 2, 3]
,当程序执行时它返回1
,但是,当按下;
(用户请求另一个值值),则返回2
等等,直到列表为空。返回列表递归序言
尽管我已经设法一次列出所有值,但这里的关键问题是,我该如何等待并让用户决定他是否想要另一个值。
只是这样做:
member(X, List).
这将枚举的List
的下一个成员每个;
。对谓词的每次调用都会在X
中实例化List
的下一个成员,直到所有成员都耗尽。
是的,有一个内置函数可以做到这一点,但我认为您应该尝试自己写它来更好地理解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
序言说明你的第一个解决方案,并等待您的答复。您按';'继续:
;
X = 2 ;
X = 3 ;
false.