6.5 KiB
6.5 KiB
title | author | date | url | wordtwit_post_info | categories | |||
---|---|---|---|---|---|---|---|---|
applyの使い方がわかったかもしれない! | kazu634 | 2008-10-02 | /2008/10/02/_1121/ |
|
|
id:SaitoAtsushiさんとShiroさんに教えていただいて、なんとなくわかった瞬間がきました!とりあえずその全過程をご覧ください。
gosh> (cons 1 2) (1 . 2) gosh> (apply cons '(1 2)) (1 . 2) gosh> (define p '(a b c)) p gosh> (apply car (list p)) a gosh> (car p) a gosh> (car (list p)) (a b c) gosh> (apply cdr (list p)) (b c)
ここら辺の段階ではまだよくわかっていない。。。
gosh> (apply list-ref (list p )) a gosh> (list-ref p ) a gosh> (apply list-ref (list p 1)) b gosh> (list-ref p 1) b gosh> (apply list-ref (list p 2)) c gosh> (list-ref p 2) c gosh> (apply length (list p)) 3 gosh> (length p) 3 gosh> (apply list-ref '(1)) *** ERROR: wrong number of arguments for #<subr list-ref> (required 2, got 1) Stack Trace: _______________________________________ gosh> (list p 2) ((a b c) 2)
ここら辺でもまだ事の重要性に気づいていなかった。。。
gosh> (list-ref p 1) b gosh> (list p ) ((a b c) )
もしや…applyって「一番外側の()を外して手続きに引数として渡している」んじゃあ…そうじゃないと、
gosh> (apply list-ref (list p 2)) c
とかになる理由が理解できない。これは結局
(list-ref '(a b c) )
となっているはず。そうじゃなければ、こんな挙動になるはずがない。。。
Shiro様、ありがとうございました(__)理解できました。