【发布时间】:2013-04-22 11:24:33
【问题描述】:
我正在尝试在 Prolog 中编写一个元素处理函数。它与 prolog 谓词 member/2 几乎相同,但它必须以不同的方式完成工作。为了具体;我必须说 member/2 谓词函数是这样的:
member(X, [X|_]).
member(X, [_|Tail]) :-
member(X,Tail).
当你给出一个查询例如:member(X, [1,2,3])。
它会按此顺序为您提供所有重做的X = 1; X = 2; X = 3;。我想要一个几乎相同的元素功能。当我给出这样的查询时,我希望成员函数得到相同的结果:
element(X, (1,2,3)).
区别只是括号而不是像这样的括号:[]
为了做到这一点,我尝试了:
element(X, (X,_)).
element(X, (_,Tail)) :-
element(X,Tail).
与 member/2 谓词函数实现完全相同。但这不起作用,因为它没有给出最后一个元素 X=3.
所以我又补充了一个事实:
element(X, X).
但这也不起作用,因为(显然)它用像这样的真实元素给出了不必要的答案:
X=(1,2,3)
X=(2,3)
我该如何处理?
【问题讨论】:
-
您的
member/2代码已关闭:它应该是[_|Tail],而不是[_,Tail] -
是的,我在这里写错了对不起,我现在改正了。顺便说一句,正如你所说,我在程序中以正确的方式使用它。
标签: list prolog element member