【发布时间】:2014-05-05 23:31:44
【问题描述】:
Prolog 新手在这里,如果我想知道某些东西是否是列表的成员,他们想知道为什么这些规则不能独立存在。
member(X, [X|_]).
member(X, [_|Y]) :- member(X,Y).
如果我要求以下规则:
member(will, [anna, eddie, pat, will, marjorie, donna]).
我是真的,但是如果我删除:
member(X, [X|_]).
只要离开第二条规则,我就错了。如果第二条规则声明“如果 X 是列表尾部的成员,则 X 是列表的成员”,为什么会这样?
“will”是该列表尾部的成员。
而且,为什么可以
member(X, [X|_]).
单独告诉我 X 何时是列表的头部(当第二条规则不能时)?
谢谢。
【问题讨论】:
-
如果第一个子句
member(X, [X|_]).不存在,问自己一个问题,“第二个子句中的member(X, Y)什么时候会变为真(成功)?”。请记住:这是一个递归查询。 -
考虑
memberd/2,它基本相同,但没有多余的答案。
标签: prolog