我是一个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?
(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)