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