Merhaba, Şunu açıkça itiraf etmeliyim ki stream'ler şu ana kadar SICP'den öğrendiğim en inanılmaz yöntem oldu. Daha 3.5.1 bölümün başını okudum ve Eratosthenes Eleği (Sieve of Eratosthenes) algoritmasını öğrenmem ile "tüm asal sayıları hesaplayan" kodu yazmam bir oldu. (Bilmiyorum belki ileride egzersiz olarak verilmiştir bu problem, ama ben sonraki satırı okumaya bile sabredemedim.) Liste üyelerinin de ilgisini çekebileceğini düşündüm:
(define-syntax stream-cons (syntax-rules () ((_ item stream) (cons item (delay stream))))) (define stream-car car) (define (stream-cdr stream) (force (cdr stream))) (define stream-null '()) (define stream-null? null?) (define (stream-filter pred s) (cond ((stream-null? s) stream-null) ((pred (stream-car s)) (stream-cons (stream-car s) (stream-filter pred (stream-cdr s)))) (else (stream-filter pred (stream-cdr s))))) (define (infinite-iota from) (stream-cons from (infinite-iota (+ from 1)))) (define primes-stream (let loop ((primes-lst (infinite-iota 2))) (let ((prime (stream-car primes-lst))) (stream-cons prime (loop (stream-filter (lambda (p) (not (= (remainder p prime) 0))) (stream-cdr primes-lst)))))) Ne kadar asal sayı istiyorsanız hiç üşenmeden STREAM-CAR ve STREAM-CDR ile primes-stream'in içinden istediğiniz kadarını alın. Stream'ler ile ucu açık listeler oluşturmak gerçekten inanılmaz bir silah. Ama bence birikimli (accumulative) programların iteratif olarak işlemesine de olanak sağlaması harika! Siz kodunuz iteratif mi oldu diye düşünmeden, bildiğiniz (cons (car lst) (loop (cdr lst))) ile babadan kalma birikimli yöntemlerinizi kullanmaya devam edebilirsiniz. Rekürsif çağrıların iteratif ilerlemesi stream'ler tarafından zaten hallediliyor olacak. "Başka bir arzunuz?" sloganının bulunduğu reklam gerçekten Lisp ile ilgili değil miydi? Çok büyük kayıp olmuş. :-) Unutmadan, bu arada [EMAIL PROTECTED]'tek tartışırken Eratosthenes Eleği ile ilgili şöyle şeylerden de bahsedildi: 18:29 <lisppaste> vy annotated #36101 with "a working primes stream" at http://paste.lisp.org/display/36101#1 18:29 <pjd_> yay 18:30 <vy> A "prime on demand" generated primes list. :) 18:30 <bsmntbombdood> fun 18:33 <gnomon> vy, have you looked at Bengelloun's incremental linear prime number sieve? ... 18:36 <vy> gnomon: No :-( Let me check it! 18:36 <gnomon> ...right, two more seconds. 18:37 <pjd_> http://www.springerlink.com/index/U066R5H74R7432HN.pdf ? 18:37 <gnomon> OK, I can't access my high-quality scan of the article right now because of a faulty network connection, but fortunately djb's copy is still accessible: http://cr.yp.to/bib/1986/bengelloun.html 18:38 <gnomon> This is a truly pimptastic algorithm. If you really like it, I highly recommend reading Paul Pritchard's work on segmented wheel sieves. 18:39 <gnomon> There's also an excellent overview of more modern sifting techniques by Sorenson, Dunten and Jones out there. That one is easy to find. İyi çalışmalar. P.S. emacs ve Türkçe karakter ile ilgili soruya gelen cevaplar için teşekkür ederim. Şu an kendi bilgisayarımın başında olmadığım için önerileri deneme şansım olmadı. Hafta sonu o işe bakacağım. (Tabii ilk önce vm'e alışıp "dpkg --purge mutt" demezsem.) _______________________________________________ cs-lisp mailing list cs-lisp@cs.bilgi.edu.tr http://church.cs.bilgi.edu.tr/lcg http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp