Prolog以递归方式检查项目是否在列表中

时间:2016-04-27 17:06:40

标签: list recursion prolog

所以我试着编写一段代码来检查项目是否在列表中。

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

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

1 个答案:

答案 0 :(得分:2)

您的谓词面临以下两个问题:

  • 对于空列表,基本案例is_member(_,[]).将始终返回true,这是不正确的;以及

  • 您的变量应以 U ppercase字符开头: Tail

如何实现解决这两个问题的谓词的示例:

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