我正试图用Prolog解决一个新程序,我被卡住了,不知道如何继续...我必须做一个有3个参数的谓词,第一个是元素列表,第二个是是元组列表,如果元组的第一个元素与第一个参数列表的元素匹配,则第三个必须是返回的包含元组的第二个元素的列表.它也必须删除副本!!
例如,
check([a,c],[(a,aa),(bb,bbb),(a,aa),(c,def)],X).
X = [aa, def] .
Run Code Online (Sandbox Code Playgroud)
如您所见,a和c匹配元组列表,因此返回元组的第二个元素.
所以它可以工作,但如果有多个元组包含第一个匹配的第一个元素,它只需要一次,例如:
check([a,b],[(a,c),(a,d),(b,c),(b,e),(c,f)],X).
X = [c] .
Run Code Online (Sandbox Code Playgroud)
它第一次找到并且第一次取c和b,再次取c,但不迭代找到更多的a或b,正确的结果应该是X = [c,d,e].
所以,请问您如何解决这种情况或解决问题的任何线索......
这是我的代码:
check([],_,[]).
check(L,DIC,Xord) :- inter(L,DIC,X), list_to_set(X,Xord).
inter([],_,[]).
inter(L1, DIC, L3) :-
L1 = [H|T],
DIC = [(DIC1,DIC2)|_],
H == DIC1,
L3 = [DIC2|L3T],
inter(T, DIC, L3T).
inter(L1,[_|DIC],L3) :- inter(L1,DIC,L3).
inter([_|T], DIC, L3) :- inter(T, DIC, L3).
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的时间.