我有一个Node.JS应用程序,我想要执行以下操作:
1.查询API以读取子句并将其写入文件data.pro
2.运行swipl
作为输出结果的命令
3.解析结果并继续执行Node.JS。
我已经将swipl
命令作为:
swipl -s triangular.pro -g "customRatio(A,C,D,1.05,T)." -t halt.
现在customRatio/5
有很多解决方案,我想在我的主应用程序中进一步处理。以交互模式运行它的示例输出将是:
A = (portugal, brazil, 656.1249261859458),
B = (brazil, germany, 5.36135535063264),
C = (germany, portugal, 0.0002993),
T = 1.0528532618885567 ;
我不需要它采用这种格式,我只想要最简单的方法来将所有目标添加到命令或程序中。我见过findAll
的示例,但无法使用多个输出到流。我还看过dump
和write
的例子。
我只是认为必须有一种简单的方法将所有结果转储到文件中。
提前谢谢。
答案 0 :(得分:3)
您能否详细说明您在使用forall
时遇到的问题?
我能想到的基于forall/2
的解决方案如下(我将其拆分为多行,以便它更具可读性):
forall(
(Goal = customRatio(A, C, D, 1.05, T), call(Goal)),
(write(Goal), nl)
)
命令变为:
swipl -s triangular.pro -g "forall((Goal = customRatio(A, C, D, 1.05, T), call(Goal)), (write(Goal), nl))." -t halt.
PS:您可以将forall
放入辅助谓词中,该谓词将Goal
作为参数,然后将所有结果写入屏幕或文件,例如:
swipl -s triangular.pro -g "results_to_file(customRatio(A, C, D, 1.05, T))." -t halt.
答案 1 :(得分:1)
所以在@DmitriChubarov的评论和@ code_x386的类似回复的帮助下,我到了那里。
假设我们有一个已经提供结果的函数:
customRatio(A,C,D,1.05,T)
我们想要目标的所有结果并将它们写入文件。我已经这样做了:
findOpportunities(MinRatio):-
open('output.txt',write, Stream),
findall((P1,P2,P3,Ratio),customRatio(P1,P2,P3, MinRatio, Ratio), List),
write(Stream, List),
close(Stream).
然后在命令行上调用以下命令:
swipl -s triangular.pro -g "findOpportunities(1.02)." -t halt.
code_x386提出的解决方案有效,但是编写了该子句以及结果,例如:
customRatio((portugal,brazil,1707.3295658260913),(brazil,germany,0.03409),(germany,portugal,0.017399),1,1.0126716463779004)
customRatio((brazil,germany,0.03409),(germany,france,0.001601),(france,brazil,18663.68047779022),1,1.018628032848078)
customRatio((brazil,germany,0.03409),(germany,portugal,0.017399),(portugal,brazil,1707.3295658260913),1,1.0126716463779004)
谢谢你们两位!