souffle 语法
文章目录
souffle 语法
概述:
souffle 中的主要语言元素是关系声明(relations)、事实(facts)、规则(rurle)、指令(instruction)。
关系(relations):
关系是一组有序元组(x1,…Xk),其中每个元素xi是由属性类型表示的数据域的成员。
|
|
上式定义了A包含数对的关系。第一个属性被命名为x
, 第二个属性被命名为y
。属性具有由标识符指定的类型,标识符跟在属性后面的冒号后。在上式中,x
和y
都是number类型。souflfle的类型检查器将会使用关系的属性来推断变量的类型。
类型(types):
Souffle 包含四种原始类型:
- 符号类型:
symbol
- 数字类型:
number
- 无符号类型:
unsigned
- 浮点数类型:
float
|
|
事件(facts):
事件是无条件成立的条款;它们是有规则头,但是没有规则体。
|
|
关系A
有两个事件:A(1,2).
和 A(2,3).
注:事件可以使用输入指令(.input)进行加载。
规则(rules):
规则是一个子句,它有一个谓词作为头部,一个或者多个文字在主体中。文字可以是谓词,否定谓词或约束。
|
|
示例
代码示例
|
|
以上的规则为:如果存在表x,y 即 edge(x,y) ,则可以推导出path(x,y) ; 如果存在边edge(z, y)和路径path(x, z) 那么就存在路径path(x,y).
输出结果
|
|
解析
- A(1, 2) => B(1, 2); A(2, 3) => B(2, 3)
- A(1, 2) , B(2, 3) => B(1, 3)
综上可得:B(1, 2) B(2, 3) B(1, 3)
文章作者 墨初
上次更新 2022-09-06