У меня есть следующий код в файле с именем "testing.pl":
fact(1).
fact(2).
fact(3).
funcA(X) :- funcB(X).
funcB(X) :- fact(X).
testing :- funcA(_X).
Затем в интерпретаторе SWI-Prolog я запрашиваю funcA(X).
, и на выходе получается:
X = 1 ;
X = 2 ;
X = 3.
Но всякий раз, когда я запрашиваю testing.
, результат будет:
true ;
true ;
true.
Итак, мои вопросы:
Как я могу использовать заключение правила как предпосылку другого правила (funcA(X)
справа от testing
), но иметь такой же эффект, как если бы я запрашивал эту предпосылку (funcA(X)
)?
В приведенном выше примере я хотел бы написать testing.
в какой-то момент моего файла "testing.pl" и заставить funcA (X) делать то же самое, что и при запросе с помощью интерпретатора, поэтому funcB (X) будет проверять наличие все значения, которые X может взять из fact (N) и вернуть.
Результатом моего желания было бы написать testing.
и попасть на экран:
X = 1 ;
X = 2 ;
X = 3.
Спасибо.
testing.
приводил кX = 1, ...
, вам нужно, чтобыX
был аргументом дляtesting
. Итак,testing(X) :- funcA(X).
(что, похоже, не добавляет смысла). В качестве альтернативы, что менее предпочтительно, вы можете записать результаты:testing :- funcA(X), write('X = '), write(X), nl.
- person lurker   schedule 13.04.2017