0
私は単純なダンプダウンの例があります。私は、さまざまなサーバーからパラメータとその値を格納するための小道具テンプレートを持っています。プロパティ値は、Stringまたはnumeric(IntegerまたはFloat)のいずれかです。現在、システムからプロパティーを読み取る "コレクター"は、列値をStringとしてファクトを生成します。文字列を浮動小数点に変換する方法
(deftemplate prop (slot serverid) (slot name) (slot value))
(assert (prop (serverid "ppn45r07vm_0") (name "email.encoding") (value "utf-8")))
(assert (prop (serverid "ppn45r07vm_0") (name "inventory.safety.threshold") (value "99.0")))
(assert (prop (serverid "ppn45r55vm_0") (name "inventory.safety.threshold") (value "993.1")))
(defrule check-range
(prop (serverid ?s) (name "inventory.safety.threshold") (value ?v))
(test (> (float ?v) 100.0))
=>
(printout t "safety threshold on server " ?s " is set too high at " ?v crlf)
)
私の質問 - 私は範囲チェックを実行できるように、どのように私はfloatまたは整数値のいずれかに文字列値を変換しない、などJESSで作品上記のサンプルコードJESSのフロート機能は、文字列になりますので、 Floatを返します。 CLIPSのfloat関数は数値をとり、floatを返します。私はStringをFloatに変換する同様のCLIPS関数を見つけることができませんでした。明白な答えがあるかどう
ただ完全を期すために、クリップでは、私は次のようなエラーに
CLIPS> (defrule check-range
(prop (serverid ?s) (name "inventory.safety.threshold") (value ?v))
(test (> (float ?v) 100.0))
=>
(printout t "safety threshold on server " ?s " is set too high at " ?v crlf)
)
[ARGACCES5] Function float expected argument #1 to be of type float
[DRIVE1] This error occurred in the join network
Problem resides in associated join
Of pattern #1 in rule check-range
[ARGACCES5] Function float expected argument #1 to be of type float
[DRIVE1] This error occurred in the join network
Problem resides in associated join
Of pattern #1 in rule check-range
謝罪を取得します。助けを前にありがとう。
恐ろしい - 作品!ありがとう。 – Bernie