Prolog 标准 member/2 与 member/2 实施追加?

Prolog standard member/2 vs member/2 implemented with append?

我试图通过绘制两者的回链程序来确定哪个成员实现更有效。

标准实施:

isMember(X,[X|Tail]).  
isMember(X,[H|Tail]) :- isMember(X,Tail).

追加实现:(来自我的 class 笔记)

appendMember(X,List).  
appendMember(X,List) :- myAppend(List1,[X|List2],List).  

myAppend([],List,List).
myAppend([H|List1],List2,[H|Result]) :- myAppend(List1,List2,Result).

当我在 TK Eclipse 上使用跟踪器时,我通过递归调用获得了标准实现的预期输出,但追加实现立即成功退出。

我想知道这是为什么以及如何为 append 方法绘制反向链接过程。

提前致谢!

appendMember(X,List). 立即得到满足,无论您对 2 个参数有什么看法,因为它们是未连接的、未实例化的变量。

因此,我认为您应该将其删除。