前言
Datalog 是一种由 Prolog 分化而来的逻辑编程语言,相比 Prolog 最大的不同在于 Datalog 对于语法做出了很多限制因此是非图灵完全的,然而 Datalog 仍然在数据库和程序分析中有着广泛的应用。Souffle 是 Datalog 的高效实现之一,之前在北大熊英飞老师的公开课上曾经见过但是那个时候不理解也不太会写,最近修程序分析的时候又一次遇到,大作业被迫写了一千多行,因此本文就是用来记录一下 Souffle 编程的经验。
本文的代码可以在 Souffle 的在线编译器中运行。
For English version of this post, see this.