[英]How to define a variadic function
我正在尋找類似於Javascript的arguments
數組的內容:
function parent(){
child.apply(this.arguments);
}
我知道可變參數長度的點符號以及方案的apply
函數。
這似乎不起作用,因為點被當作第一個參數:
(define (parent .)
(list .))
(parent 1 3 4 6 7)
Error: bad argument count - received 5 but expected 1: #<procedure (array arg-list)>
這可行,但並不理想。 我想在沒有額外語法的情況下調用該函數來定義args列表:
(define (parent args-list)
(apply list args-list))
(parent 1 3 4 6 7)
Error: bad argument count - received 5 but expected 1: #<procedure (array args-list)>
(parent `(1 3 4 6 7))
(1 3 4 6 7)
正確的語法是:
(define (parent . args-list)
<do something with args-list>)
像這樣使用它:
(parent 1 2 3 4 5)
在該過程內部,所有參數都將綁定到名為args-list
。 在以上代碼段中, args-list
將為'(1 2 3 4 5)
。 這是可變參數函數如何在Scheme中工作的一個示例。
為了完整起見,匿名函數也可以使用相同的機制(注意args-list
不在括號內):
((lambda args-list <do something with args-list>) 1 2 3 4 5)
你要:
(define (parent . args)
args) ; args is a list
實際上是list
的“默認”實現。
(define (list . x) x)
應用時的錯誤消息(define (parent . ) ...)
似乎是錯誤的,此外,該代碼不應首先編譯,因為它是無效的語法。 可能暗示您使用的Chicken Scheme版本存在錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.