Questa è una domanda relativa allo SICP Book Chapter 3.5.2.SICP Infinite Stream (capitolo 3.5.2)
Sto implementando una struttura dati del flusso in altri linguaggi di programmazione. E non sono sicuro di aver compreso correttamente il seguente frammento.
(define (integers-starting-from n)
(cons-stream n (integers-starting-from (+ n 1))))
(define integers (integers-starting-from 1))
Da quanto capii (integers-starting-from (+ n 1))
eseguirà la funzione che restituisce un valore eseguendo (cons-stream n (integers-starting-from (+ n 1))))
. Poiché il secondo parametro formale di cons-stream
è (integers-starting-from (+ n 1))
e poiché è racchiuso tra ()
, eseguirà la funzione di nuovo e di nuovo all'infinito anziché ritardare l'esecuzione.
Da ciò che vedo prima di eseguire questo snippet, sembra che il seguente intero porterà a un ricorsivo infinito prima ancora dell'esecuzione dell'elemento secondi del flusso.
Perché questo sembra funzionare per lo schema come mostrato durante lo lecture?
Dal mio capire dovrebbe essere scritto qualcosa di simile a questo, invece:
(define (integers-starting-from n)
(cons-stream n (lambda() (integers-starting-from (+ n 1)))))
(define integers (integers-starting-from 1))
Questo significa che schema ha alcuni tipi di magia che ritardano l'esecuzione di (integers-starting-from (+ n 1))
?
Grazie in anticipo
Per un'implementazione di uno stile di streaming un po 'diverso, consultare [SRFI-41] (http://srfi.schemers.org/srfi-41/), che è disponibile anche in [il mio blog] (http://programmingpraxis.com/essays/#srfi41streams). Il documento descrive in dettaglio l'implementazione di "cons-stream". – user448810