2013-01-23 43 views
2

假设我有一个程序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)有没有办法做到这一点?

回答

4

使用适用于:e.g

(apply lcm (upto 1 10)) 

“应用” 功能适用于参数列表。我发现,要做到这一点使用eval

+1

嗯,是的,这似乎比我想出的方式清洁。 – sea6ear

0

的一种方法如下:

(EVAL(利弊“LCM(高达110)))

+1

是的,一般来说,'eval'是要避免的。 “eval”的合法用途很少(REPL就是其中之一),所以任何时候你开始想要达到'eval',都会觉得很难。 ;-) –

+0

是的,千万不要这样做。你让我大声喘气。 –

0

在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) 
相关问题