我有一个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
。当我想要的是“ true”时,因为发现了一个与输入匹配的事实。如何获得结果?
我想从Rake(一种Ruby衍生物)中查询我的Prolog程序。我以为脚本是实现此目的的简便方法,但可能不够强大?
一种简单的,公认的粗略方法是分别向writeln(true)
和writeln(false)
的成功子句和失败子句main/0
分别添加和:
main :- catch(query, E, (print_message(error, E), fail)),
writeln(true),
halt.
main :- writeln(false),
halt(1).
虽然我确定还有更好的解决方案...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句