假设我有一个程序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)
有没有办法做到这一点?
假设我有一个程序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)
有没有办法做到这一点?
使用适用于:e.g
(apply lcm (upto 1 10))
“应用” 功能适用于参数列表。我发现,要做到这一点使用eval
的一种方法如下:
(EVAL(利弊“LCM(高达110)))
是的,一般来说,'eval'是要避免的。 “eval”的合法用途很少(REPL就是其中之一),所以任何时候你开始想要达到'eval',都会觉得很难。 ;-) –
是的,千万不要这样做。你让我大声喘气。 –
在MIT-计划(不确定别人的),你可以使用你的函数定义中的点。
(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)
调用将完成这项工作。请注意,参数会被放入列表中。
有趣的事实:在'名单”过程中的MIT-计划‘运行’源作为list.scm实际上定义:
(define (list . args)
args)
嗯,是的,这似乎比我想出的方式清洁。 – sea6ear