(apply map list '((a b c) (1 2 3))) => ((a 1) (b 2) (c 3))
私は本当にこの表現の周りに私の頭を包むことはできません。ここで何が起きてるの?私はスキームの表記の周りに私の頭をラップする助けが必要です
(apply map list '((a b c) (1 2 3))) => ((a 1) (b 2) (c 3))
私は本当にこの表現の周りに私の頭を包むことはできません。ここで何が起きてるの?私はスキームの表記の周りに私の頭をラップする助けが必要です
最初に理解する必要があるのは、map
です。 map
は、関数と1つ以上のリストを取ります。 map
は、各リストの最初の要素でその関数を呼び出し、それはmap
によって返されるリストの最初の値になります。 map
は、各リストの2番目の要素に対してこれを繰り返します。リストの1つが要素を使い果たすまで続きます。たとえば、次の結果のリストの最初の値として5を得るために、各リストの最初の引数に
(map + '(1 2 3) '(4 5 6)) => (5 7 9)
map
最初のコール+
、1,4、。他の値も同様に計算されます。
apply
は、最後の引数として関数、値の束、リストを取ります。
(apply map list '((a b c) (1 2 3)))
が、その後の各要素と、それに渡された関数を呼び出します
(apply map (list list '(a b c) '(1 2 3)))
apply
次のようになりますように、最初のapply
は、その最後の引数として渡されたリストへの機能のほかに、そのすべての引数を追加しますリスト個別の引数として、上記なりそう:
(map list '(a b c) '(1 2 3))
map
がlist
を呼び出します各リストの最初の引数に、(a 1)
が得られ、結果のリストの最初の値になります。他のリストについても同じことが起こります。
apply
はすぐ
(apply map list '( (a b c) (1 2 3) ))
から
( map list '(a b c) '(1 2 3) )
に、あなたのコードの純粋なテキスト変換として扱いやすい、あなたが有名なよう「適用マップ・リスト」を暗記して、覚えているでしょう2Dリストリスト行列を転置するためのLispイディオム。私は、地図の縮小に満足していないGoogleが、インターネットを耳にするために、そのクラスタ上に「apply-map-list」を展開する予定であるという噂を聞いてきた。 – Kaz