什么时候使用mapc而不是mapcar?

高洛·罗登(Golo Roden)

到目前为止,我一直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

雷纳·约瑟夫(Rainer Joswig)

通用Lisp Hyperspec说:

mapcmapcar除了未累积应用功能的结果外,其他情况类似将返回列表参数。

因此,在完成映射以消除可能的副作用时使用它。mapcar可以使用,但是mapc减少了不必要的麻烦。它的返回值也是原始列表,可以用作另一个函数的输入。

例子:

(mapc #'delete-file (mapc #'compile-file '("foo.lisp" "bar.lisp")))

上面将首先编译源文件,然后删除源文件。因此,编译后的文件将保留。

(mapc #'delete-file (mapcar #'compile-file '("foo.lisp" "bar.lisp")))

上面将首先编译源文件,然后删除已编译的文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

什么时候使用reduce()而不是sum()?

什么时候使用Var而不是函数?

什么时候不是str?

什么时候应该使用转义而不是encodeURI / encodeURIComponent?

什么时候使用Externalizable而不是writeReplace + readResolve?

什么时候使用zip而不是izip更好?

什么时候应该使用AutoSeededRandomPool(而不是NonblockingRng)?

什么时候应该使用@Component而不是@Service?

Python:什么时候应该使用子类而不是方法?

我什么时候应该使用 try catch 而不是 then catch?

什么时候应该使用HStoreField而不是JSONField?

在Python中,什么时候应该使用函数而不是方法?

在Python中,什么时候应该使用函数而不是方法?

什么时候应该使用ld而不是gcc?

什么时候应该使用原语而不是包装对象?

什么时候应该使用结构而不是类?

什么时候应该使用自旋锁而不是互斥锁?

什么时候应该使用列表List <>而不是Collection <>

什么时候应使用xargs而不是while读取循环?

什么时候使用NSDecimal,NSDecimalNumber而不是double更好?

什么时候应该使用Map而不是For Loop?

什么时候必须使用接口而不是抽象类?

什么时候使用Golang的默认MUX而不是自己做

斯威夫特:什么时候应该使用“ var”而不是“ let”?

socket.io什么时候使用轮询而不是websockets?

什么时候使用ssh -L而不是ssh -D

Kubernetes什么时候使用机密而不是configmap?

什么时候应该使用Logic App而不是Web Job?

什么时候在角度资源上使用。$ put而不是.put?