В Prolog я могу вызвать REPL для тестирования кода Prolog в интерактивном режиме (интерактивный режим), а также я могу записать код в файл, который будет выполнен из командной строки (пакетный режим).Распечатка только одного результата в пакетном режиме с помощью Prolog
В интерактивном режиме я использую функцию setof
, чтобы получить все результаты.
?- [likes].
?- setof(X, likes(sam, X), L).
L = [chips, chop_suey, chow_mein, dahl, kurma, pizza, spaghetti, sweet_and_sour, tandoori].
Я могу продолжать задавать результаты от ?- likes(sam, X)
, Я могу также использовать once
функцию, чтобы получить только один результат.
?- once(likes(sam,X)).
X = dahl.
Для этого я могу использовать ту же функцию setof, чтобы распечатать результаты в пакетном режиме.
:- initialization main.
main :-
[likes],
setof(X, likes(sam, X), L),
write(L),
halt.
Тогда, как я могу получить и распечатать результат once(likes(sam,X))
? Я попытался использовать L2 = once(likes(sam, X)
, чтобы распечатать результат в L2
, но у меня появились ошибки.
В целом, как получить результаты интерактивного режима? Например, как распечатать результаты (истинное или ложное значение) ?- likes(sam, dahl)
в пакетном режиме?
Ваш первый вопрос, используйте: 'раз (любит (Сэм, X)), писать (X), nl'. Второй вопрос: '(нравится (sam, dahl) -> write ('true'); write ('false')), nl'. Это то, что вам нужно? – lurker