--- title: applyの使い方がわかったかもしれない! author: kazu634 date: 2008-10-02 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4321;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - gauche - Lisp ---
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様、ありがとうございました(__)理解できました。