Jess で数値のリストを合計しようとしていますが、その方法がわかりません。
(deffunction sumAll ($?n) (return (+ ?n)))
(sumAll 1 2 3)
上記のコードは機能しません。どうすればいいですか?
これを行うには2つの方法があります。関数呼び出しを文字列として作成し、パーサーに再解析させることで、ワンライナーを実行できます。
(deffunction sumAll($?args)
(eval (str-cat "(+ " (implode$ ?args) ")" )))
または、反復を明示的に行うこともできます。
(deffunction sumAll($?args)
(bind ?sum 0)
(foreach ?num ?args
(bind ?sum (+ ?sum ?num))))
2 つ目はおそらくより効率的です。