5.9 KiB
5.9 KiB
title | author | date | url | wordtwit_post_info | categories | |||
---|---|---|---|---|---|---|---|---|
手続き中の引数の書き方がわからないかもしれない | kazu634 | 2008-08-28 | /2008/08/28/_1089/ |
|
|
『プログラミングGauche』を再度読み直しているところ。わかっていないところが多い。とりあえず手続き中の引数の書き方はオーソドックスなのは次の二つのパターン:
(define plus2_1 (lambda (arg) (+ arg 2))) (define (plus2_2 arg) (+ arg 2))
こう宣言することで
gosh> (plus2_1 5) 7 gosh> (plus2_2 5) 7
となる。ここで76-7ページあたりの記述を見てみる。「受け取った引数を出力してから、任意の手続きを実行する手続き」としてmake-loggerが紹介されている。
(define (make_logger func) (lambda args (print "args=" args) (apply func args))) (define my_append_log (make_logger append))
自分の理解だとこのmake_loggerは「(make_logger 手続き名 引数」とかが十分通用しそうに思っていた。けど、「引数は一つだ!」と怒られる。
gosh> (make_logger print '(1 2 3)) *** ERROR: wrong number of arguments for #<closure make_logger> (required 1, got 2) Stack Trace: _______________________________________ gosh> (make_logger append '(1 2 3) '(1 2 3)) *** ERROR: wrong number of arguments for #<closure make_logger> (required 1, got 3) Stack Trace: _______________________________________ gosh> (make_logger append) #<closure (make_logger make_logger)> gosh> (make_logger) *** ERROR: wrong number of arguments for #<closure make_logger> (required 1, got ) Stack Trace: _______________________________________
うでも、これは大丈夫。
gosh> (my_append_log '(1 2 3) '(4 5 6)) args=((1 2 3) (4 5 6)) (1 2 3 4 5 6)
(make_logger)の宣言中のlambdaはどこに消えたの?というか引数は一つだけでは?なんで複数個の引数がありなわけ?