Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 递归返回列表头prolog_List_Prolog - Fatal编程技术网

List 递归返回列表头prolog

List 递归返回列表头prolog,list,prolog,List,Prolog,每当用户请求另一个值时,我想返回列表的第一个元素,即list=[1,2,3],当程序执行时,它返回1,但是当时(用户要求另一个值),然后返回2,依此类推,直到列表为空 虽然我已经设法一次列出了所有值,但这里的关键问题是,我如何等待并让用户决定他是否需要另一个值。只需执行以下操作: member( X, List ). 这将枚举每个上列表的下一个成员。对谓词的每次调用都将实例化X中List的下一个成员,直到所有成员都已用尽。是的,有一个内置函数可以做到这一点,但我认为您应该尝试自己编写它,以便更

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

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

只需执行以下操作:

member( X, List ).

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

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

each_one([A|_],A).
列表的一个元素是其head元素

each_one([_|B],X):- each_one(B,X).
列表的尾部有更多的元素。这是递归子句

空列表中没有元素,因此我们不写任何东西(尽管我们可以编写
每个元素([],):-失败。
,效果相同)

现在您可以尝试:

4 ?- each_one([1,2,3],X).
X = 1
Prolog向您显示第一个解决方案并等待您的响应。你按;'要继续,请执行以下操作:

      ;
X = 2 ;
X = 3 ;
false.