0

私はjessでこのコードを書きましたが、このエラーが発生し続け、その理由がわかりません。

(deffacts prices (price apple 125) (price chips 45) (price cola 110) (price egg 700))
(defrule createBill (buy ?n $?) => (assert (bill ?n 0)))
(deffunction getTotalPrice (?list)
    (bind ?result 0) (foreach ?product $?products 
        (price ?product ?price)
        (bind ?result (+ ?result ?price)))
    (return ?result))
(defrule calculate ?i<-(bill ?n $?) (buy ?n $?products)  =>  (retract ?i) (bind ?result (getTotalPrice $?products))(assert (bill ?n ?result)))
(reset)
(assert (buy yaser cola egg))
(run)

そして、私はこのエラーが発生します???

Jess reported an error in routine Funcall.execute
        while executing (price ?product ?price)
        while executing (foreach ?product $?products (price ?product ?price) (bind ?result (+ ?result ?price)))
        while executing defrule MAIN::calculate
        while executing (run).
  Message: Undefined function price.
  Program text: ( run )  at line 41.

問題は、Jessが price という名前の関数を探していることですが、(price ... ...)
どんなヘルプでも良いという事実を利用したいのです :) Yaser .

4

1 に答える 1

0

実際、エラー メッセージはかなり明確だと思います。という名前の関数はありませんpriceが、式(price ?product ?price)はその名前の関数の呼び出しとして解釈されます。

あなたのやりたいgetTotalPriceことは理解できますが、あなたの実装は理解できません。関数の機能について誤解していると思います。applyおそらく、他の言語の同様の名前の関数と混同しているのでしょう。

とにかく、getTotalPriceJess で記述する方法は、クエリを使用することです。それらについてはこちらをご覧ください。

于 2013-11-08T23:14:11.690 に答える