相关疑难解决方法(0)

AUBUC的Prolog联盟

我最近开始学习Prolog,我无法解决如何组合三个列表的问题.

我能够组合2个列表:

%element
element(X,[X|_]).
element(X,[_|Y]):-
               element(X,Y).

%union

union([],M,M).
union([X|Y],L,S) :- element(X,L),union(Y,L,S).
union([X|Y],L,[X|S]) :- (not(element(X,L))),union(Y,L,S).
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?

list prolog

20
推荐指数
2
解决办法
2605
查看次数

prolog,在元组列表中查找列表元素

我正试图用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)

在此先感谢您的时间.

tuples list prolog

9
推荐指数
3
解决办法
3530
查看次数

标签 统计

list ×2

prolog ×2

tuples ×1