2013-05-22 34 views
5

olarak bir şema ile ilgili sorum var * let ifade edilmesi. Daha kesin olmak gerekirse, “normal” hakkında merak etmeme izin vermem, ama izin verme * ile başka bir ifade ifadesini kullanalım.bir lambda ifadesi olarak * biz izin uygulamak nasıl bir lambda ifadesi (değil düzenli let)

+1

onay bunu: http://stackoverflow.com/questions/15003518/confused-by-the-difference-between-let-and-let-in-scheme/15006018#15006018 –

+0

Bağlantı için teşekkürler! –

cevap

5

let* formu iç içe lambda s dizisidir. Örneğin, bu:

(let* ((a 10) 
     (b (+ 10 a))) 
    (+ a b)) 

bu eşdeğerdir mi:

((lambda (a) 
    ((lambda (b) 
     (+ a b)) 
    (+ 10 a))) 
10) 
+0

Cevabınız için teşekkürler, şimdi çok anlam ifade ediyor! –

4

bir let* o zaman cevap olacak let dönüştürülebilir eğer, 'normal' let merak edilmez yana . (R5RS, sayfa 44, (define-syntax let* ...) bakınız)

(let ((a ...)) 
    (let ((b ...)) 
    (let ((c ...)) 
     body ...))) 

:

(let* ((a ...) (b ...) (c ...)) body ...) 

eşdeğerdir: Dolayısıyla biliyoruz. Şimdi, bu verilen ve bilgi bu: Yukarıda gösterdi olur let* ait

((lambda (a) body ...) ...) 

'genişleme':

(let ((a ...)) body ...) 

eşdeğerdir

((lambda (a) 
    ((lambda (b) 
     ((lambda (c) 
      body ...) 
      <c-init>)) 
     <b-init>)) 
    <a-init>)