到目前为止,我一直mapcar
在将函数应用于列表的所有元素,例如:
(mapcar (lambda (x) (* x x))
'(1 2 3 4 5))
;; => '(1 4 9 16 25)
现在我了解到,还有一个mapc
功能完全相同,但不返回新列表,而是原始列表的函数:
(mapc (lambda (x) (* x x))
'(1 2 3 4 5))
;; => '(1 2 3 4 5)
此功能的目的是什么?如果无法访问结果,我将何时使用mapc
而不是mapcar
?
通用Lisp Hyperspec说:
mapc
mapcar
除了未累积应用功能的结果外,其他情况类似。将返回列表参数。
因此,在完成映射以消除可能的副作用时使用它。mapcar
可以使用,但是mapc
减少了不必要的麻烦。它的返回值也是原始列表,可以用作另一个函数的输入。
例子:
(mapc #'delete-file (mapc #'compile-file '("foo.lisp" "bar.lisp")))
上面将首先编译源文件,然后删除源文件。因此,编译后的文件将保留。
(mapc #'delete-file (mapcar #'compile-file '("foo.lisp" "bar.lisp")))
上面将首先编译源文件,然后删除已编译的文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句