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
(=> ("LOWER" "UPPER" "" "123")
seq 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. 横断の規則と副作用
なし。