【问题标题】:Import a Datalog knowledge base in Racket在 Racket 中导入 Datalog 知识库
【发布时间】:2020-10-27 12:59:37
【问题描述】:
是否可以在 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
【问题讨论】:
标签:
import
racket
datalog
【解决方案1】:
从#lang datalog 导出的理论总是命名为theory,所以你的y.rkt 应该是:
#lang racket
(require datalog
"x.rkt")
(datalog theory (? (parent X douglas)))
请注意,我们正在查询parent 表,因此我们需要将其指定为(? (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)))