Dopo avermi fatto strada attraverso SICP ho deciso di lavorare anche se alcuni Project Euler problemi usando lo schema. In questo particolare problema sto provando a generare un flusso infinito di interi, tuttavia sto ricevendo un errore dall'interprete del Schema del MIT.
;Aborting!: maximum recursion depth exceeded
Questo mi porta a credere che l'implementazione del mio stream non sia corretta, tuttavia dopo aver confrontato il mio codice con quello del libro non trovo errori.
(define (delay x)
(lambda ()
(x)))
(define (force x)
(x))
(define (cons-stream a b)
(cons a (delay b)))
(define (car-stream s)
(car s))
(define (cdr-stream s)
(force (cdr s)))
(define (integers-starting-from n)
(cons-stream n (integers-starting-from (+ n 1))))
L'errore si verifica quando eseguo il seguente codice:
(define n (integers-starting-from 1))
Dove ho sbagliato?
Modifica
Grazie a Chris Jester-Young qui sotto ho lavorato ora. La corretta implementazione di delay e stream è la seguente.
(define-syntax delay
(syntax-rules ()
((delay expr)
(lambda ()
(expr))))
(define-syntax stream
(syntax-rules ()
((stream a b)
(cons a (delay b)))))