假设我有一个upto
程序,当(upto 1 10)
调用时会生成列表'(1 2 3 4 5 6 7 8 9 10)
。
如果我想将此列表用作lcm
之类的函数的参数,该函数采用多个参数而不是单个列表,例如(lcm 1 2 3 4 5 6 7 8 9 10)
是否有办法执行此操作?
答案 0 :(得分:4)
使用apply:例如
(apply lcm (upto 1 10))
"应用"将函数应用于参数列表。
答案 1 :(得分:0)
我发现使用eval执行此操作的一种方法如下:
(eval(cons'lcm(up to 1 10)))
答案 2 :(得分:0)
在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)
将完成这项工作。请注意,args会被放入列表中。
有趣的事实:`list'程序实际上是在MIT-Scheme“运行时”源的list.scm中定义的:
(define (list . args)
args)