首页 > 解决方案 > 一个函数的输出作为 Prolog 中另一个函数的输入参数

问题描述

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

fact(a).
fact(b).
fact(c).

main(ListOfFacts) :-
    bagof(Afact, fact(Afact) , ListOfFacts).

我希望main(R).(with is 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?

标签: prolog

解决方案


我通过使用这样的东西解决了它:

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

随时对此解决方案发表评论。


推荐阅读