Я использую PyClips (это Clips, встроенный в Python) для создания знаний
база. Я хочу добавить новое правило в файл базы знаний, вызвав функцию
который реализует правило, показанное в этой функции:
def normalRule(clips, i, path):
rule_name = 'rule_' + str(i)
rule_prec = '(phase ?phase)'
rule_prec += '?address1 <-(Organ (name ?organ))'
rule_prec += '?address2 <-(Surgical-Action (action ?action))'
rule_prec += '?address3 <-(Medical-Devices (tool-name ?tool))'
rule_body = '(if(=(str-compare ?*pickupEvent* "no")0) then'
rule_body += '(bind ?predicted-action ?action)'
rule_body += '(bind ?*current-action* ?predicted-action)'
rule_body += '(bind ?ex-tool ?tool)'
rule_body += 'else'
rule_body += '(bind ?actual-action ?action)'
rule_body += '(bind ?s-tool ?tool)'
rule_body += '(retract ?address1 ?address2 ?address3)'
rule_body += '(if (and (=(str-compare ?predicted-action ?actual-action)0)\
(=(str-compare ?ex-tool ?s-tool) 0)) then'
rule_body += '(updateAction ?*current-action* ?actual-action)'
rule_body += 'else'
rule_body += '( if (not(=(str-compare ?predicted-action ?actual-action)0)) then'
rule_body += '(updateAction ?*current-action* ?actual-action)'
rule_body += '(assert (You have mistake: incorrect action))'
rule_body += '(bind ?*number-of-mistakes* (+ ?*number-of-mistakes* 1)))'
rule_body += '(if (not(=(str-compare ?ex-tool ?s-tool) 0)) then'
rule_body += '(updateAction ?*current-action* ?actual-action)'
rule_body += '(assert (You have mistake: incorrect surgical device))'
rule_body += '(bind ?*number-of-mistakes* (+ ?*number-of-mistakes* 1))'
rule_body += ')))'
rule = clips.BuildRule(rule_name, rule_prec, rule_body)
Правило внутри этой функции работает нормально, когда я применяю его с помощью клипов, но теперь я хочу
создавать новое правило каждый раз, когда вызывается функция.
Но когда я вызвал эту функцию, я получил ошибку:
Traceback (most recent call last):
File "C:\Users\DELL\My Documents\Aptana Studio 3 Workspace\
Interface\src\ruleModel\ruleTypes.py", line 305,
in <module> normalRule(clips, 1, "C:\Users\DELL\Desktop\bjareb\tt.py")
File "C:\Users\DELL\My Documents\Aptana Studio 3 Workspace\
Interface\src\ruleModel\ruleTypes.py", line 39,
in normalRule rule = clips.BuildRule(rule_name, rule_prec, rule_body)
File "C:\Python26\lib\clips\_clips_wrap.py", line 149, in _WRAPPER return f(*args)
File "C:\Python26\lib\clips\_clips_wrap.py", line 238, in _WRAPPER return f(*newargs)
File "C:\Python26\lib\clips\_clips_wrap.py", line 3317, in BuildRule _c.build(construct)
_clips.ClipsError: C08: syntax error, or unable to parse expression
Так что, пожалуйста, я пересмотрел это много раз, и в этом нет ничего плохого
конструкция, также она работает, когда я использую клипы, так как мне решить эту проблему?