定义规则以确定列表是否包含给定成员

我最近开始学习prolog,并面临这个问题的问题:

Define a rule to determine if a list contains a given member.

我搜索了遍布堆栈溢出以获得一些链接,以更好地理解这个问题,并为它编写解决方案,但找不到任何东西.你们中的任何人都可以建议解决这个特殊问题吗?

我的方法:

Iterative over the list and see if your member matches with head:

on(Item,[Item|Rest]).  /* is my target item on the list */

on(Item,[DisregardHead|Tail]):-


          on(Item,Tail).

你认为我的方法是正确的吗?

最佳答案
是的,您的解决方案是正确的,并且可以向各个方向发太好了!

笔记:

>事实上,您的解决方案比任务要求的更为通用.这是件好事!在我看来,这项任务措辞严厉.首先,第一个条款不是一个规则,而是一个事实.最好将这个任务表达为:“编写一个Prolog程序,如果一个术语出现在列表中,那么该程序就是真的.”这留下了一个好的解决方案也会自动解决的其他用例,例如生成解决方案.
>这个常见的谓词被广泛称为member / 2.就像您的解决方案一样,它也适用于所有方向.试试例子? – 成员(E,Ls).
>谓词的名称可能更好. Prolog的一个好的命名约定清楚地说明了每个参数的含义.考虑例如:element_list / 2,并从那里开始.

转载注明原文:定义规则以确定列表是否包含给定成员 - 代码日志