4.9 KiB
4.9 KiB
title | author | date | url | wordtwit_post_info | categories | |||
---|---|---|---|---|---|---|---|---|
applyの挙動 | kazu634 | 2008-10-01 | /2008/10/01/_1119/ |
|
|
id:SaitoAtushi様から教えていただいたapplyについてのコメントを参考にしてやってみた:
gosh> (define (hoge . args) (write args)) hoge gosh> (apply hoge '(1 2 3 4)) (1 2 3 4)#<undef> gosh> (hoge '(1 2 3 4)) ((1 2 3 4))#<undef> gosh> (define (hoge . args) (print args)) hoge gosh> (hoge '(1 2 3 4)) ((1 2 3 4)) #<undef> gosh> (apply hoge '(1 2 3 4)) (1 2 3 4) #<undef>
applyを使うときと使わないときとではこんな挙動の違いがあったのですが。。。こいつは知らなかったです。。。applyを使うとどんな挙動をしているんだろう?applyはリストの要素一つ一つを手続きに渡す…はずだけど、今回のhogeはリストを返している。ちょっと実験をしてみる。
gosh> (+ '(1 2 3 4)) *** ERROR: number required, but got (1 2 3 4) Stack Trace: _______________________________________ gosh> (apply + '(1 2 3 4)) 10
これから判断するに、内部的にはapplyは
(+ (+ (+ (+ 4) 3) 2) 1)
というような挙動をしているはず。でも、
(apply hoge '(1 2 3 4)
はリストを返す。なんかこんがらがってきたぞ。。。