У меня есть сценарий оболочки, 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
. Когда то, что я хочу, является «истинным», потому что был найден факт, соответствующий совпадению. Как я могу получить результат?
Я хочу запросить мою программу Prolog от Rake (производная от Ruby). Я считаю, что сценарий - это простой способ сделать это, но, может быть, он недостаточно мощный?
Вам нужно решить, действительно ли вам нужно позвонить в свою программу как сценарий, а не использовать верхний уровень (интерпретатор).Практически нет смысла использовать скрипт вместо верхнего уровня, за исключением, может быть, обработки пакетного текста (?). –
@Boris Я обновил вопрос. Возможно, есть что-то, что я могу сделать, чтобы сделать это лучше. –
Вы можете отключить информативное сообщение о времени, затраченном на компиляцию файла, и количество предложений в нем с помощью опции командной строки SWI-Prolog '--quiet' или' -q'. –