gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:45:46 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com