7

nasıl tanımlanır:Ben JavaScript'ın <code>arguments</code> diziye benzer bir şey arıyorum variadic işlevi

function parent(){ 
    child.apply(this.arguments); 
} 

ben nokta değişken argüman uzunlukları için gösterim ve ayrıca, planın apply fonksiyonunun farkındayım. nokta ilk argüman olarak alınır olarak

Bu işe görünmüyor:

(define (parent .) 
      (list .)) 

(parent 1 3 4 6 7) 
Error: bad argument count - received 5 but expected 1: #<procedure (array arg-list)> 

Bu işler ancak ideal değildir. Ben args listesini tanımlamak için ekstra sözdizimi olmadan işlevini aramak istiyorum:

(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) 

cevap

9

doğru sözdizimi şöyledir:

(define (parent . args-list) 
    <do something with args-list>) 

böyle kullanın:

prosedür içinde
(parent 1 2 3 4 5) 

, tüm argümanlar args-list adında bir listeye bağlı olacaktır. Yukarıdaki snippet'te, args-list, değeri olarak '(1 2 3 4 5) olacaktır. Bu, değişkenli işlevlerin Şemada nasıl çalıştığıyla ilgili bir örnektir. Bütünlük adına

, aynı mekanizma anonim fonksiyonlar için kullanılabilir, çok ( args-list olduğunu fark değil parantez çevrili):

((lambda args-list <do something with args-list>) 1 2 3 4 5) 
3

Sen istiyorum:

list infact 'varsayılan' uygulamasıdır
(define (parent . args) 
    args) ; args is a list 

.

(define (list . x) x) 

(define (parent .) ...) uygulayarak hata mesajı geçersiz sözdizimi olarak, aynı zamanda, kod ilk etapta yanlış derlenmiş olmamalıdır görünüyor. Kullandığınız Tavuk Şeması sürümü ile bir hata olabilir.