1

Jess で数値のリストを合計しようとしていますが、その方法がわかりません。

(deffunction sumAll ($?n) (return (+ ?n)))

(sumAll 1 2 3)

上記のコードは機能しません。どうすればいいですか?

4

1 に答える 1

2

これを行うには2つの方法があります。関数呼び出しを文字列として作成し、パーサーに再解析させることで、ワンライナーを実行できます。

(deffunction sumAll($?args)
    (eval (str-cat "(+ " (implode$ ?args) ")" )))

または、反復を明示的に行うこともできます。

(deffunction sumAll($?args)
    (bind ?sum 0)
    (foreach ?num ?args
        (bind ?sum (+ ?sum ?num))))

2 つ目はおそらくより効率的です。

于 2012-06-25T16:57:56.620 に答える