【发布时间】:2015-02-21 20:34:18
【问题描述】:
我有一个shell脚本,script.sh:
#!/bin/bash
FIRST_ARGUMENT="$1"
swipl -s script4.pl $FIRST_ARGUMENT
prolog.pl:
:- initialization main.
query :-
current_prolog_flag(argv, Argv),
concat_atom(Argv, ' ', Atom),
read_term_from_atom(Atom, Term, []),
call(Term).
main :-
catch(query, E, (print_message(error, E), fail)),
halt.
main :-
halt(1).
b(a).
a(c, d) :- writeln('I was called!').
现在如果我从命令行调用脚本:
sh s.sh 'a(c,d).'
将输出"I was called!"。
但如果我运行一个查询,除了是/否答案:
sh s.sh 'b(a).'
它告诉我的只是:script4.pl compiled 0.00 sec, 7 clauses。当我想要的是“真实”时,因为找到了与输入匹配的事实。我怎样才能得到结果?
我想从 Rake(Ruby 衍生产品)查询我的 Prolog 程序。我想脚本是一种简单的方法来做到这一点,但也许它不够强大?
【问题讨论】:
-
您需要确定是否真的需要将程序作为脚本调用,而不是使用顶层(解释器)。几乎没有理由使用脚本而不是顶层,除了可能是批处理文本处理 (?)。
-
@Boris 我更新了这个问题。也许我可以做些什么来让这变得更好。
-
您可以使用 SWI-Prolog 命令行选项
--quiet或-q将有关编译文件所用时间和其中子句数量的信息性消息静音。
标签: macos prolog swi-prolog prologscript