相当于 CLIPS 语句“find-all-facts”的 CLIPS C 函数是什么?

问题描述 投票:0回答:1

尝试创建一个规则文件,然后加载该文件以在 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 应用程序中对其进行评估。

c swift clips
1个回答
0
投票

正确的代码是:

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)
}
© www.soinside.com 2019 - 2024. All rights reserved.