在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宏使用的#
。