npt-japanese

% Function MAP-INTO

UP


Function MAP-INTO

Function MAP-INTO

構文

map-into result-sequence function &rest sequences => result-sequence

引数と戻り値

result-sequence - 正常なシーケンス
function - sequencesにある複数の引数を取る関数の指定子
sequences - 正常なシーケンス

定義

引数sequencesの各要素をfunctionに適用した結果を result-sequenceに含めるよう、破壊的に修正します。

result-sequencesequencesの各要素は、 それぞれリストかvectorのどちらかになります。 もしresult-sequencesequencesの各要素が、 全てかあるいはいくつかが同じ長さではないとき、 繰り返しはもっとも短いシーケンス (sequencesのどれかか、あるいはresult-sequence)が 使い終わったときに終わります。 もしresult-sequenceがfill-pointerを持ったvectorのとき、 そのfill-pointerは、何度繰り返しを行うかを決めるときには無視され、 その後、fill-pointerに関数が適用された回数が設定されます。 もしresult-sequenceが、sequencesの最も短いものより長いときは、 result-sequenceの末尾の余分な要素は変更されずに残されます。 もしresult-sequencenilのときは、 nilは長さ0のシーケンスなので、 即座にnilが返却されます。

もしfunctionに副作用があるなら、 最初にインデックス0の全ての要素で呼ばれ、 次にインデックス1の全ての要素で呼ばれ、 といったように数えることができます。

例文

(setq a (list 1 2 3 4) b (list 10 10 10 10)) =>  (10 10 10 10)
(map-into a #'+ a b) =>  (11 12 13 14)
a =>  (11 12 13 14)
b =>  (10 10 10 10)
(setq k '(one two three)) =>  (ONE TWO THREE)
(map-into a #'cons k a) =>  ((ONE . 11) (TWO . 12) (THREE . 13) 14)
(map-into a #'gensym) =>  (#:G9090 #:G9091 #:G9092 #:G9093)
a =>  (#:G9090 #:G9091 #:G9092 #:G9093)

影響

なし。

例外

result-sequenceが正常なシーケンスでないとき、 型type-errorのエラーを通知する準備をしなければなりません。 sequencesの各要素が正常なシーケンスでないとき、 型type-errorのエラーを通知する準備をしなければなりません。

参考

なし。

備考

map-intomapの違うところは、 シーケンスを作成するのではなく 既存のシーケンスを変更するところです。 加えて、map-intoは2つの引数のみで呼び出すことができますが、 それに対してmapは最低でも3つの引数が必要です。

map-intoは下記のように定義できます。

(defun map-into (result-sequence function &rest sequences)
  (loop for index below (apply #'min 
                               (length result-sequence)
                               (mapcar #'length sequences))
        do (setf (elt result-sequence index)
                 (apply function
                        (mapcar #'(lambda (seq) (elt seq index))
                                sequences))))
  result-sequence)

TOP, Github