总结杰斯的数字列表

时间:2012-06-24 20:12:28

标签: lisp jess

我想在Jess中总结一个数字列表,但我不确定如何去做它:

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

(sumAll 1 2 3)

上述代码不起作用。我该怎么办?

1 个答案:

答案 0 :(得分:2)

以下是两种方法。您可以通过将函数调用构建为字符串并使解析器重新解析它来执行单行操作:

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

或者你可以明确地进行迭代。

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

第二个可能会更有效率。