我尝试了很多解决方案,这与我所期待的结果非常接近。
我想要合并2个列表,但我得到的是列表而不是一个列表。
res1(Title,L3) :- findall(Genre,(book(Title,_,Genre,_)),L3).
res2(Author,L2) :- findall(Genre,(name(Author,Editor,_), house(Editor,_,Genre)),L2).
finalres(Title,Author,L) :- res1(Title,L3), res2(Author,L2), merged(L3, L2, L).
merged([],List,List).
merged([Element|List1],List2,[Element|List3]) :- merged(List1,List2,List3).
合并后的代码来自Prolog Combining Two Lists。
当我通过在参数中写两个列表来尝试这个时,我得到了正确的结果:
?- merged([g1,g2],[g3,g4],L).
L = [g1, g2, g3, g4].
然而,当我通过我的决赛调用它时,我得到以下内容:
?- finalres("some title",a1,L).
L = [[g3, g4], [g1, g2]]
我想看L = [g3, g4, g1, g2]
- 订单不会打扰我。
我也不需要从列表中删除欺骗(我稍后会处理成员:))
是因为merged(List2)的第二个参数永远不会分开吗?我误解了这个附加代码是如何工作的吗?
使用SWI-Prolog。
提前致谢!
答案 0 :(得分:0)
使用评论中的建议答案进行修复:
finalres(Title,Author,K) :- res1(Title,L3),
res2(Author,L2),
merged(L3, L2, L),
flatten(L, K).