blog/content/post/2008-10-02-00001044.md

6.5 KiB
Raw Blame History

title author date url wordtwit_post_info categories
applyの使い方がわかったかもしれない kazu634 2008-10-02 /2008/10/02/_1121/
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";}}
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様、ありがとうございました(__)理解できました。