在Prolog代碼中,可以使用「無頭」Horn子句將指令傳遞給編譯器,該子句與左指向的材料含義左側無關:''(⇐)。例如,導入模塊或聲明Unit Test Code:序言和無頭暗示
:- begin_tests(lists).
:- use_module(library(lists)).
test(reverse) :- reverse([a,b], [b,a]).
:- end_tests(lists).
顯然無頭Horn子句的源文件中的位置是非常重要的。
A喇叭子句
HEAD :- BODY1, BODY2, .... , BODYN
理解可以等同於邏輯表達式
body_1∧body_2∧....∧body_n⇒頭
或,因爲這是理解爲經典邏輯,使用布爾代數的等價規則:
¬body_1∨¬body_2∨....∨¬body_n∨頭
在無頭條款的情況下,我們因此斷言否定:
:- begin_tests(lists).
在原則意味着我們斷言begin_tests(lists)
是不正確的。
(實際上在Answer Set Programming,上述排序的條款被用作 「矛盾」 拒絕產生的解::- move(D,P,T), blocked(D-1,P,T).
表示「它是不正確的是移動(d,P,T)∧阻止(d-1,P ,T)「,相應地拒絕任何可能的解決方案。)
我理解能夠指定代碼分隔符,源註釋,文件元信息和其他編譯指令的實用需求。但爲什麼該指令使用:-
。如果使用與邏輯句法完全無關的其他符號(例如,傳統上由C宏使用的#
。