Действие относится к BNF-описанию синтаксиса функции:
(do-for-fact <fact-set-template> <query> <action>*)
Этот термин действия является тем же самым термином, который используется в теле деформации:
(deffunction <name> [<comment>]
(<regular-parameter>* [<wildcard-parameter>]) <action>*)
Возвращаемое значение в обоих случаях является последним оцененным действием. Если последнее оцененное действие возвращает значение FALSE, то функция do-for-fact возвращает значение FALSE так же, как если бы не было набора фактов, удовлетворяющего запросу.
В вашем примере функция распечатки не имеет возвращаемого значения, которое не-функция обрабатывается как не-FALSE, поэтому она будет работать так, как вы ожидаете
CLIPS> (printout t)
CLIPS> (not (printout t))
FALSE
CLIPS>
Если бы вы включили символ FALSE после вызова распечатки, то возвращаемое значение для проверки факта всегда будет FALSE независимо от того, удовлетворял ли запрос какой-либо набор фактов.
(printout t ?p1:name " " ?p2:name " " ?p3:name crlf)
FALSE))