是否附加地图的身份功能?
Is append the identity function for map?
在做一些测试时,我注意到 append
在使用 map
:
时总是给我与输入相同的输出
#lang sicp
(map append '(1 2 3 4 5))
(map (lambda (x) x) '(1 2 3 4 5))
; (1 2 3 4 5)
; (1 2 3 4 5)
(map append '((1 2)(3 4)))
(map (lambda (x) x) '((1 2)(3 4)))
; ((1 2) (3 4))
; ((1 2) (3 4))
我觉得 neat/unexpected 很漂亮。事实上是这样吗?如果是这样,append
是如何给出身份 属性 的?
append
过程采用 零个或多个 列表参数,以及 可以是任何对象的最终参数 。当最后一个参数是一个列表时,附加的结果是一个正确的列表。当最后一个参数不是列表,但提供了其他列表参数时,结果是一个不正确的列表。当只提供一个参数时,它只是被返回。这种带有一个参数的行为正是身份过程的行为。
> (append '(1 2) '(3))
(1 2 3)
> (append '(1 2) 3)
(1 2 . 3)
> (append '(1 2))
(1 2)
> (append 3)
3
调用(map append '(1 2 3 4 5))
相当于:
> (list (append 1)
(append 2)
(append 3)
(append 4)
(append 5))
(1 2 3 4 5)
在这里,append
只是作为一个身份程序,如上所述。
在做一些测试时,我注意到 append
在使用 map
:
#lang sicp
(map append '(1 2 3 4 5))
(map (lambda (x) x) '(1 2 3 4 5))
; (1 2 3 4 5)
; (1 2 3 4 5)
(map append '((1 2)(3 4)))
(map (lambda (x) x) '((1 2)(3 4)))
; ((1 2) (3 4))
; ((1 2) (3 4))
我觉得 neat/unexpected 很漂亮。事实上是这样吗?如果是这样,append
是如何给出身份 属性 的?
append
过程采用 零个或多个 列表参数,以及 可以是任何对象的最终参数 。当最后一个参数是一个列表时,附加的结果是一个正确的列表。当最后一个参数不是列表,但提供了其他列表参数时,结果是一个不正确的列表。当只提供一个参数时,它只是被返回。这种带有一个参数的行为正是身份过程的行为。
> (append '(1 2) '(3))
(1 2 3)
> (append '(1 2) 3)
(1 2 . 3)
> (append '(1 2))
(1 2)
> (append 3)
3
调用(map append '(1 2 3 4 5))
相当于:
> (list (append 1)
(append 2)
(append 3)
(append 4)
(append 5))
(1 2 3 4 5)
在这里,append
只是作为一个身份程序,如上所述。