假設我有一個程序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