簡體   English   中英

如何定義可變函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM