2016-12-18 8 views
0

私はこのClipsプロジェクトでここで取り残されています。私は本当に私の問題を解決する方法を知らない。どんな助け?私は*の.clpファイルをエクスポートする方法を知らないすべてのクリップとdunnoの初歩この基本プロジェクトの扱い方

 CLIPS> (assert (saving 30000)) 
<Fact-1> 
CLIPS> (assert (income 50000)) 
<Fact-2> 
CLIPS> (assert (job steady)) 
<Fact-3> 
CLIPS> (assert (expenses 10000)) 
<Fact-4> 
CLIPS> (defglobal ?*s* = 30000) 
CLIPS> (defglobal ?*i* = 50000) 
CLIPS> (defglobal ?*e* = 10000) 
CLIPS> (defglobal ?*x* = 0.5) 
CLIPS> (defrule rule1 
    (test (> ?*s* (* ?*x* ?*i*))) 
    => 
    (assert (savingst good))) 
CLIPS> (defrule rule2 
(job steady) 
(test(> ?*i* ?*e*)) 
=> (assert (incomest good)) 
) 
CLIPS> (defrule rule3 
(and (savingst good)(incomest good)) 
=> 
(printout t "Advise is invest money in stocks" crlf) 
(assert (investment ok)) 
) 
CLIPS> (run) 
Advise is invest money in stocks 
CLIPS> (bsave "C:/Users/Home/Desktop/pro") 
TRUE 
CLIPS> (save file.clp) 

最初: this is the project

、ここでは私のコードです。私はそれを上記のようにしました。 このファイルをロードして実行すると、rule1のみが実行されます。 私を助けることができる人は誰ですか?

答えて

0

file.clpを開くと、assert文が存在しないことがわかります。 save関数は、関数/コマンドではなく、構造体(defrule、defglobal、deftemplateなど)のみを保存します。 deffacts(リセット)コマンドが使用されるたびにアサートされなければならない事実を示すために構築し使用します。

(deffacts initial 
    (saving 30000) 
    (income 50000) 
    (job steady) 
    (expenses 10000)) 

あなたがクリップであなたの構築物は、コマンドプロンプト入力し、それらを保存する必要はありません。テキストエディタ(別のプレーンテキストエディタまたはCLIPS WindowsおよびMac OS IDEに含まれているテキストエディタ)を使用してください。これにより、作成/コピー/編集が簡単になります。コマンドプロンプトは主に実行/デバッグコマンドに使用できます。ここで

は、あなたの問題のためのより良いアプローチです:

CLIPS> 
(deftemplate client 
    (slot name) 
    (slot income (default 0)) 
    (slot savings (default 0)) 
    (slot job (allowed-values steady part-time unemployed unknown)) 
    (slot expenses (default 0))) 
CLIPS> 
(deftemplate analysis 
    (slot client) 
    (slot attribute) 
    (slot value)) 
CLIPS>   
(deffacts clients 
    (client (name "John Doe") 
      (income 50000) 
      (savings 30000) 
      (job steady))) 
CLIPS>    
(defrule advise-stock-investment 
    (analysis (client ?client) 
      (attribute income) 
      (value good)) 
    (analysis (client ?client) 
      (attribute savings) 
      (value good)) 
    => 
    (assert (analysis (client ?client) 
        (attribute advice) 
        (value "invest money in stocks")))) 
CLIPS> 
(defrule good-saver 
    (client (name ?client) 
      (savings ?savings) 
      (income ?income)) 
    (test (> ?savings (* 0.5 ?income))) 
    => 
    (assert (analysis (client ?client) 
        (attribute savings) 
        (value good)))) 
CLIPS>    
(defrule good-income 
    (client (name ?client) 
      (job ?status) 
      (income ?income) 
      (expenses ?expenses)) 
    (test (or (eq ?status steady) 
      (> ?income ?expenses))) 
    => 
    (assert (analysis (client ?client) 
        (attribute income) 
        (value good)))) 
CLIPS>      
(defrule print-advice 
    (analysis (client ?client) 
      (attribute advice) 
      (value ?text)) 
    => 
    (printout t ?client " should " ?text "." crlf)) 
CLIPS> (watch rules) 
CLIPS> (reset) 
CLIPS> (run) 
FIRE 1 good-saver: f-1 
FIRE 2 good-income: f-1 
FIRE 3 advise-stock-investment: f-3,f-2 
FIRE 4 print-advice: f-4 
John Doe should invest money in stocks. 
CLIPS> 
+0

はどうもありがとう:)それは完璧でした。 – shaaidaa

+0

私は事実を追加するには、このコードを使用: 'CLIPS>(DEFRULE insertFacts =>()(ジョブ安定を主張) ()(収入50000をアサート) ()30000を保存する(主張) ()(費用10000を主張)) ' しかし、あなたはもっと論理的です。 – shaaidaa

関連する問題