Prolog递归检查一个项目是否在列表中

问题描述:

所以我想写一段代码来检查项目是否在列表中。Prolog递归检查一个项目是否在列表中

is_member(_,[]). 
is_member(X,[X|_]). 
is_member(X,[_|tail]):- is_member(X,tail). 

这是目前我所用的代码。如果该项目位于第一个位置,但不检查列表的其余部分,则它可以工作。任何人都可以帮我弄清楚我做错了什么?谢谢。

+1

怎么样使用内建的['成员/ 2'](http://www.swi-prolog.org/pldoc/doc_for?object = member/2)函数 –

谓词面临以下两个问题:

  • 情况is_member(_,[]).将始终是一个空列表,这是不正确返回true的基础;和

  • 你的变量应该有ü ppercase字符开始:

一个例子如何实现解决了这两个问题,一个断言:

is_member(X,[X|_]). 
is_member(X,[_|Tail]):- is_member(X,Tail).