在 Racket 中导入 Datalog 知识库

Import a Datalog knowledge base in Racket

是否可以在 Datalog Racket 中将声明为“#lang datalog”的文件 x 中定义的知识库导入和使用到另一个声明为“#lang racket”的文件 y 中?

例如:

;; x.rkt

#lang datalog

parent(john, douglas).


;; y.rkt

#lang racket

(require datalog)

(require "x.rkt")

;;(datalog parent (? (X douglas)))  DOES NOT WORK

#lang datalog 导出的理论始终命名为 theory,因此您的 y.rkt 应该是:

#lang racket

(require datalog
         "x.rkt")

(datalog theory (? (parent X douglas)))

注意我们查询的是parenttable,所以需要指定为(? (parent X douglas))(? (X douglas)) 不正确。

最后,如果你想重命名从x.rkt导出的理论,你可以使用rename-in:

#lang racket

(require datalog
         (rename-in "x.rkt" [theory my-thy]))

(datalog my-thy (? (parent X douglas)))