LISP:如何获得列表的运行总和?(没有全局变量)

ram*_*rur 5 lisp common-lisp

我是一个LISP新手.

为了获得列表的运行总和,我写的是 -

(setf sum 0.0)
(mapcar #'(lambda(x)
    (setf sum (+ sum x)) sum) values))
Run Code Online (Sandbox Code Playgroud)

例如,如果您'(1 2 3 4)输入,则上述代码将'(1 3 6 10)作为输出返回,依此类推.

是否可以在不使用全局变量的情况下(以更优雅的方式)执行相同的操作sum

hua*_*uan 7

(loop for x in '(1 2 3 4) sum x into y collect y)
Run Code Online (Sandbox Code Playgroud)

scanl 是一个oneliner:

(defun scanl (f init xs)
  (loop for x in xs collect (setf init (funcall f init x))))
Run Code Online (Sandbox Code Playgroud)