尝试创建一个规则文件,然后加载该文件以在 Swift 的 CLIPS 中进行评估,但遇到以下错误:
[PRNTUTIL1] Unable to find deftemplate 'message'.
我的代码的注释部分可以正常工作。
////// testing.clp
(deftemplate message
(slot value))
(defrule hello
=>
(assert (message (value "Hello world... from Swift!"))))
func test_CLIPS() {
var cv = CLIPSValue()
/* ////// THIS WORK OK!!!
Eval(clipsEnv, "(clear)", nil)
Build(clipsEnv, "(deftemplate message (slot value))")
Build(clipsEnv, "(defrule hello => (assert (message (value \"\nFact Slot Retrieval... from Swift!\"))))")
Eval(clipsEnv, "(reset)", nil)
Eval(clipsEnv, "(run)", nil)
Eval(clipsEnv, "(find-all-facts ((?f message)) TRUE)", &cv)
*/
Clear(clipsEnv)
c_load_rules(name: "testing", type: "clp") // Call CLIPS function Load()
Reset(clipsEnv)
Run(clipsEnv, -1)
Eval(clipsEnv, "(find-all-facts ((?f message)) TRUE)", &cv) //?? CLIPS C equivalent exist/necessary??
print(c_eval(cv: cv)) // Call CLIPS function FactSlotValue and return a string from "lexemeValue->contents"
}
Load testing.clp OK...
(deftemplate message
(slot value))
(defrule hello
=>
(assert (message (value "Hello world... from Swift!"))))
我正在尝试加载包含 CLIPS 模板和 CLIPS 规则的文件,并在 iOS 应用程序中对其进行评估。
正确的代码是:
private func test_CLIPS() {
var cv = CLIPSValue()
let fileURL = Bundle.main.path(forResource: "testing", ofType: "clp")
Clear(clipsEnv)
Reset(clipsEnv)
Load(clipsEnv, fileURL)
Run(clipsEnv, -1)
Eval(clipsEnv, "(find-all-facts ((?f message)) TRUE)", &cv)
self.message = c_eval(cv: cv)
}