upto
like を呼び出すと(upto 1 10)
list が生成されるプロシージャがあるとします'(1 2 3 4 5 6 7 8 9 10)
。
lcm
このリストを、単一のリストではなく複数の引数をとるような関数の引数として使用したい場合、(lcm 1 2 3 4 5 6 7 8 9 10)
これを行う方法はありますか?
upto
like を呼び出すと(upto 1 10)
list が生成されるプロシージャがあるとします'(1 2 3 4 5 6 7 8 9 10)
。
lcm
このリストを、単一のリストではなく複数の引数をとるような関数の引数として使用したい場合、(lcm 1 2 3 4 5 6 7 8 9 10)
これを行う方法はありますか?
apply を使用します。
(apply lcm (upto 1 10))
「適用」は、引数のリストに関数を適用します。
evalを使用してこれを行う方法の1つは、次のとおりです。
(eval(cons'lcm(up to 1 10)))
MIT-Scheme (他は不明) では、関数定義でドットを使用できます。
(define (func-with-multiple-args . args)
(let loop ((args args))
(if (null? args)
'done
(begin (display (car args)) (loop (cdr args))))))
で呼び出す
(func-with-multiple-args 1 2 3 4)
仕事をします。引数がリストに入れられることに注意してください。
興味深い事実: `list' プロシージャは実際には MIT-Scheme の「ランタイム」ソースの list.scm で次のように定義されています。
(define (list . args)
args)