是否附加地图的身份功能?

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只是作为一个身份程序,如上所述。