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 个参数有什么看法,因为它们是未连接的、未实例化的变量。
因此,我认为您应该将其删除。
我试图通过绘制两者的回链程序来确定哪个成员实现更有效。
标准实施:
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 个参数有什么看法,因为它们是未连接的、未实例化的变量。
因此,我认为您应该将其删除。