2013-01-23 44 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) 
相關問題