假设我有一个过程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 lcm (upto 1 10))
“应用”将函数应用于参数列表。
我发现使用 eval 的一种方法如下:
(eval (cons 'lcm (upto 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)