3

Lisp初心者です。そんなこと知ってる

(mapcar #'list '(1 2) '(3 4)) 

あげる

'((1 3) (2 4))

apply がどのように機能するかについての私の理解に基づいて、私は期待しています

(apply #'(lambda (&rest x) (mapcar #'list x)) '((1 2) (3 4)))

同じ結果を返します。代わりに、私は得ています

'(((1 2)) ((3 4)))

私は混乱しているので

(apply #'append '((1 2) (3 4)))

私にくれます

'(1 2 3 4)

予想通り。何が起こっている?

4

1 に答える 1

3

単純化します。Aの代わりに(1 2)、およびのB代わりに使用したとし(3 4)ます。

(apply #'(lambda (&rest x) (mapcar #'list x)) '(A B))

&rest xはすべての引数を取り、それらをリストとしてパックするため、x値は です (A B)。次にmapcar、 に渡しAlistを生成(A)し、 で同じことを 2 回繰り返しBます。次にmapcar、それらのリストを作成し、生成します( (A) (B) )

そこに print ステートメントを入れて、何が起こっているかを確認すると便利です。

于 2013-01-08T21:35:08.750 に答える