(define get-first
(lambda (l)
(call-with-current-continuation
(lambda (here)
(set! leave here)
(waddle l)
(leave (quote()))))))
(define get-first
(lambda (l)
(call-with-current-continuation
(lambda (here)
(set! leave here)
(leave (waddle l))))))
için görünüşte modeli eşyordamlar yaprakları sadece vermesidir waddle
geçirilen bir ağacın yineleme yapmak. Hemen önce ikinci-en son yeniden giriş waddle
'ın verim nedeniyle, bu sadece bir waddle
arasında, '()
verimli bir gerçek değerini saf değerini '()
yani yerine dönecektir yere Yeniden giriş noktasını belirler Tümüyle saf bir işlevmiş gibi'()
. Da, bu akılda tutarak Deneyimli Schemer en olsun ilk, get-gelecek ve badi fonksiyonları kitabın "Deneyimli Schemer", <code>get-first</code>, <code>get-next</code> aşina ve <code>waddle</code> (son iki değil burada tanımlanan) olan prosedürler değil herkes için
get-first
içinde
call/cc
içinde olacaktır, ... yukarı
get-first
setleri "gerçek" zaman
waddle
döner ne görebilir ve sonra
(leave (quote()))
get-first
değeridir (ve
leave
nedenle
'()
"gerçek" dönüşü) yapar
get-next
ki, geçen tekrarında
get-next
dönmek için tasarlanmıştır.
Neden ikinci sürüm eşdeğer değil, waddle
'un '()
değeri leave
argümanı olabilir? "leave
" Ben bunu istiyorum fonksiyonu olmadığı için
Nevermind ... "ayrılmak" Ben * olmasını istiyorum * işlev değil, ancak işlevi onun sol-sağ-to edilecek ve böylece "waddle önce görünen hangi değerlendirildiğinde olarak değerlendirildiğinden, karışıklık ". Bu, daha önce ifadede ne koyulduğunu değerlendirdiği anlamına gelir. Ahlaki: işlevine çağrı İÇİNDE yeniden tanımlanması tabi işlevlerini kullanırken dikkat! Bu, sağdan sola bir yorumlayıcının üzerindeyse, sembol izninin herhangi bir yere bırakılan işlev olarak bakılmasından önce, bu arada bir FARKLI işlev olarak ayarlanacaktır. Ne dağınıklık ... – user1457584
Çözüldüğünü duyduğuma sevindim, ancak lütfen cevabı bir yanıt olarak gönderin (burada bir yorumdan ziyade) ve kabul edin. Bu şekilde insanların soruları görebileceği şekilde buraya gelmeden çözülür. – Bridge
user1457584 @ iki sürüm derlemek olmaz: 'set !: ilişkisiz tanımlayıcı modülünde yer: Cevabı yazmış olsa bile, Sen Sorunuza yanıt işaretlemeniz gerekir – alfasin