% Function MAP
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. 横断の規則と副作用
なし。