一个函数的输出作为Prolog中另一个函数的输入参数

时间:2020-11-03 14:02:56

标签: prolog

假设我有一些谓词和类似这样的函数:

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).

我们假设有某种方法可以比较abc的顺序。

我尝试过:

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吗?

1 个答案:

答案 0 :(得分:1)

我通过使用以下方法解决了这个问题:

main_two(Ans):- main(R), mergesort(R,Ans). 

可以对此解决方案发表评论。

相关问题