假设我有一些谓词和类似这样的函数:
fact(a).
fact(b).
fact(c).
main(ListOfFacts) :-
bagof(Afact, fact(Afact) , ListOfFacts).
我希望将main(R).
(带有R = [a,b,c]
。)作为另一个函数的参数传递,例如:
mergesort([],[]).
mergesort([A],[A]).
mergesort([A,B|R],S):-
split([A,B|R],L1,L2),
mergesort(L1,S1),
mergesort(L2,S2),
merge(S1,S2,S).
split([],[],[]).
split([A],[A],[]).
split([A,B|R],[A|Ra],[B|Rb]):-
split(R,Ra,Rb).
merge(A,[],A).
merge([],B,B).
merge([A|Ra],[B|Rb],[A|M]):-
A=<B, merge(Ra,[B|Rb],M).
merge([A|Ra],[B|Rb],[B|M]):-
A>B, merge([A|Ra],Rb,M).
我们假设有某种方法可以比较a
,b
,c
的顺序。
我尝试过:
mergesort(main(R),A).
我希望它返回A=[sorted a,b,c]
,但没有。它的痕迹很简单:
Call: (10) mergesort(main(_8878), _8884) ? creep
Fail: (10) mergesort(main(_8878), _8884) ? creep
false.
任何人都可以帮助我如何正确地将main(R)
传递给mergesort
吗?
答案 0 :(得分:1)
我通过使用以下方法解决了这个问题:
main_two(Ans):- main(R), mergesort(R,Ans).
可以对此解决方案发表评论。