Function MAP
map result-type function &rest sequences+ => result
result-type - sequenceの型指定子か、nil
function - sequencesにある複数の引数を取る関数の指定子
sequences - 正常なシーケンス
result - もしresult-typeがnilではない型指定子のときは、 その型のシーケンスです。 その他の場合は(あるいはresult-typeがnilのとき) nilです。
各シーケンスから得られる引数の連続した集合に対してfunctionを適用します。 functionは最初、すべてのインデックス0の要素に対して呼び出され、 それから、すべてのインデックス1の要素に対して呼び出され、 それをくり返します。 result-typeは、返却値のシーケンスの型を示します。
mapは、result-typeがnilのときは、 nilを返却します。 それ以外のときは、mapは、 シーケンスj番目の要素が各sequencesのそれぞれの’j’番目の要素に functionを適用したものであるようなシーケンスを返却します。 返却値のシーケンスは、 sequencesの中の最も短いものと同じ長さです。 もしsequencesの一連の要素を functionに適用した結果が、 result-typeで示された型のシーケンスに 含めることができなかったときの結果は未定義です。
もしresult-typeがlistのサブタイプの場合、 リストが返却されます。
もしresult-typeがvectorのサブタイプの場合、 実装がresult-typeを要素の型として決めることができるのであれば、 その要素の型をアップグレードした結果が返却値の配列の要素の型になります。 しかし実装が要素の型を決定できないか、あるいは*のときは、 返却値の配列の要素の型はtになります。 その他の場合はエラーが発生します。
(map 'string #'(lambda (x y)
                 (char "01234567890ABCDEF" (mod (+ x y) 16)))
      '(1 2 3 4)
      '(10 9 8 7)) =>  "AAAA"
(setq seq '("lower" "UPPER" "" "123")) =>  ("lower" "UPPER" "" "123")
(map nil #'nstring-upcase seq) =>  NIL
seq =>  ("LOWER" "UPPER" "" "123")
(map 'list #'- '(1 2 3 4)) =>  (-1 -2 -3 -4)
(map 'string
     #'(lambda (x) (if (oddp x) #\1 #\0))
     '(1 2 3 4)) =>  "1010"
(map '(vector * 4) #'cons "abc" "de") should signal an errorなし。
result-typeが、 listのサブタイプでも、 vectorのサブタイプでもないとき、 型type-errorのエラーが発します。
sequenceが正常なシーケンスでないとき、 型type-errorのエラーを通知する準備をしなければなりません。
result-typeで指定した要素数と、 sequencesの最小の長さが違う場合は、 型type-errorのエラーが発します。
3.6. 横断の規則と副作用
なし。