list - Prolog 中的元素处理问题,但不在常规列表中?

标签 list prolog element member

我正在尝试在 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)

我该如何处理?

最佳答案

看来切可以解决你的问题:

element(X, (X, _)).
element(X, (_, Tail)) :-
    !, element(X, Tail).
element(X, X).

测试:

?- element(X, (1,2,3)).
X = 1 ;
X = 2 ;
X = 3.

?- element(2, (1,2,3,2)).
true ;
true.

关于list - Prolog 中的元素处理问题,但不在常规列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16145995/

相关文章:

PROLOG 全不同

CSS 行间距问题

javascript - 如何选择某种元素?

java - 如何从 ant CSV 属性中提取第一个元素

python - 将任意大小的列表拆分为 N 个不相等的部分

php - 在 yii 中使用 listdata 连接 2 列

python - SWI-Prolog 中哈希表的实现

data-structures - Prolog 中的自定义数据结构语法

C++ 用 ostream 以外的东西重载运算符 <<

python - 使用列表理解查找列表中的元素,其中另一个列表中的所有元素都是因子