List Prolog添加和删除列表元素(如果第二个列表中不存在)
我不知道我错过了什么 如果元素在arg1中但不在arg2中,我想添加它;如果元素在arg1中但不在arg2中,我想删除它 我使用的if条件包含一个函数,如果元素在arg2列表中,该函数将返回true,否则返回false。然后使用内置谓词append并选择添加或删除List Prolog添加和删除列表元素(如果第二个列表中不存在),list,prolog,List,Prolog,我不知道我错过了什么 如果元素在arg1中但不在arg2中,我想添加它;如果元素在arg1中但不在arg2中,我想删除它 我使用的if条件包含一个函数,如果元素在arg2列表中,该函数将返回true,否则返回false。然后使用内置谓词append并选择添加或删除 includes([],_). includes([P|Z],S) :- memberchk(P,S), includes(Z,S). addop([],list,res). addop([P|R],list,res) :-
includes([],_).
includes([P|Z],S) :-
memberchk(P,S), includes(Z,S).
addop([],list,res).
addop([P|R],list,res) :-
includes(P,s0) -> addop(R,list,res) ; append(P,list,res),
addop(R,list,res).
rem([],list,res).
rem([P|R],list,res) :-
includes(P,list) -> rem(R,list,res) ; select(P,list,res),
rem(R,list,res).
我对我所有的目标都错了。我根据我想要的谓词添加或删除注释和取消注释
includes([],_).
includes([P|Z],S) :-
memberchk(P,S), includes(Z,S).
addop([],list,res).
addop([P|R],list,res) :-
includes(P,s0) -> addop(R,list,res) ; append(P,list,res),
addop(R,list,res).
rem([],list,res).
rem([P|R],list,res) :-
includes(P,list) -> rem(R,list,res) ; select(P,list,res),
rem(R,list,res).
谢谢您的帮助。关于您的代码有两条评论: 您的includes谓词似乎将列表作为第一个参数,但您似乎将其当作来自addop和rem的原子来使用。 addop谓词引用s0,s0没有在任何地方定义,因此代码不会编译。 列表中,res和s0是原子。将每个字母的首字母大写,使其成为变量 目前,您对addop和res的调用可能失败,因为没有匹配规则。您真的需要使用memberchk和includes吗?如果列表项很简单,则可以使用成员谓词,这通常是内置的:
% member(Element, List) -- determines whether Element is a member of list List
member(X, [X|_]).
member(X, [_|T]):- member(X, T).
据此,addop可定义如下:
% addop(A, B, R) -- returns items from A which are not in B
% (filters A over B)
addop(A, [], A).
addop([], _, []).
addop([H | T], L, R):- member(H, L), addop(T, L, R). % skip the item
addop([H | T], L, [H | R]) :- addop(T, L, R). % add the item to the result
添加rem可以是:
% rem(A, B, R) -- returns items from A which are in B
% (A intersect B)
rem(_, [], []).
rem([], _, []).
rem([H | T], L, [H | R]) :- member(H, L), rem(T, L, R). % add the item to result
rem([_ | T], L, R):- rem(T, L, R).
您是否可以将代码格式化为使用backticks的代码,或者EditorOne上的101010按钮,这并没有改善append to work的许多想法,因为它的所有参数都应该是列表;在您的示例“appendP,list,res”中,P不是列表。例如'append'a'、['b'、'c']、X'将计算为false。