1

我正在尝试总结 Jess 中的数字列表,但我不确定如何去做:

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

(sumAll 1 2 3)

上面的代码不起作用。我该怎么做?

4

1 回答 1

2

这里有两种方法。您可以通过将函数调用构建为字符串并让解析器重新解析它来实现单线:

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

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

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

第二个可能会更有效率。

于 2012-06-25T16:57:56.620 回答