Qualcuno può aiutarmi a capire meglio come scrivere uno stream?stream in rack
Capisco che un flusso è una sequenza infinita di valori e il modo in cui ho imparato a programmarli è rappresentarli come un thunk che quando viene chiamato produce una coppia di (1) il primo elemento nella sequenza e (2) un tonfo che rappresenta il flusso per gli elementi di secondo attraverso-infinity
ad esempio:
(define powers-of-two
(letrec ([f (lambda (x) (cons x (lambda() (f (* x 2)))))])
(lambda() (f 2))))
capisco qui che si tratta solo di produrre una potenze di due e per accedere a questi, per esempio chiamando (car (powers-of-two))
risulterebbe in 2
e chiamando (car ((cdr (powers-of-two))))
sarebbe Sult in 4
Ora sto cercando di scrivere un flusso chiamato red-blue
che si alterna tra le stringhe red
e blue
ma io sono un po 'confuso su come costruirlo
così hai fatto, complimenti! Controlla la sezione Schema in http://c2.com/cgi/wiki?SieveOfEratosthenesInManyProgrammingLanguages per un esempio funzionante di flussi in stile SICP. Esiste solo una regola macro, puoi applicarla manualmente in tutto. –