Function MAP

UP


Function MAP

Function MAP

構文

map result-type function &rest sequences+ => result

引数と戻り値

result-type - sequenceの型指定子か、nil
function - sequencesにある複数の引数を取る関数の指定子
sequences - 正常なシーケンス
result - もしresult-typenilではない型指定子のときは、 その型のシーケンスです。 その他の場合は(あるいはresult-typenilのとき) nilです。

定義

各シーケンスから得られる引数の連続した集合に対してfunctionを適用します。 functionは最初、すべてのインデックス0の要素に対して呼び出され、 それから、すべてのインデックス1の要素に対して呼び出され、 それをくり返します。 result-typeは、返却値のシーケンスの型を示します。

mapは、result-typenilのときは、 nilを返却します。 それ以外のときは、mapは、 シーケンスj番目の要素が各sequencesのそれぞれの’j’番目の要素に functionを適用したものであるようなシーケンスを返却します。 返却値のシーケンスは、 sequencesの中の最も短いものと同じ長さです。 もしsequencesの一連の要素を functionに適用した結果が、 result-typeで示された型のシーケンスに 含めることができなかったときの結果は未定義です。

もしresult-typelistのサブタイプの場合、 リストが返却されます。

もしresult-typevectorのサブタイプの場合、 実装が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. 横断の規則と副作用

備考

なし。


TOP, Github