prolog - 一个函数的输出作为 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
?
解决方案
我通过使用这样的东西解决了它:
main_two(Ans):- main(R), mergesort(R,Ans).
随时对此解决方案发表评论。
推荐阅读
- python-imaging-library - 枕头 - 根据灰度值添加透明度
- python - 您是否应该在一个微服务的单独线程中运行多个 Kafka 侦听器?
- mysql - 添加多对多数据序列化
- typescript - 无法使用 for 循环和 push() 方法创建 Promise 对象列表
- tensorflow2.0 - 使用 HuggingFace 和带有 AutoModel 的 Tensorflow 进行迁移学习不起作用
- swiftui - swiftui tabbar item 图片 头像
- sql - SQL Server:避免舍入错误
- c# - 如何创建 IReadOnlyCollection
返回通用数据的方法 - android - Android如何创建第二个活动屏幕并在另一个显示器(如电视、显示器)中显示?
- python - 将 pytorch 安装到一个 conda 环境会从其他 conda 环境中删除现有安装