2012-04-01 5 views
7

SICP capitolo 3.5.3 http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5.3Come comprendere a fondo il diagramma del flusso del segnale descritto in SICP?

Nella sezione Streams as signals, SICP dà una spiegazione audio-visiva di Implicit style of definition - dal circuito di feedback. Ma voglio sapere come capire esattamente il diagramma? Qual è il vero vantaggio e c'è qualche conoscenza di base?

fare un altro esempio, non nello Schema, ma in Haskell:

fibs = fix (scanl (+) 0 . (1:)) 
fibs = fix ((0:) . scanl (+) 1) 

Possiamo anche disegnare il diagramma di flusso del segnale per entrambi. Come possiamo approfittare di questi grafici?

Grazie per i consigli e le informazioni!

+0

ricerca * Kahn e reti dataflow MacQueen *. –

risposta

4

Per reale spiegazione audiovisiva dei diagrammi, perché non dare un'occhiata ai video di accompagnamento? Sono in here, lezioni 6A e 6B.

Per quanto riguarda il "vero vantaggio" dei diagrammi, beh, sono una rappresentazione visiva dell'elaborazione del flusso, non è necessaria alcuna "conoscenza di base" per comprenderli, AFAIK la notazione di questi diagrammi è parte delle idiosincrasie di SICP, leggendo il libro e guardando i video saprai tutto quello che c'è da sapere su di loro.

+0

Grazie. Sto solo leggendo il SICP ma potrei non avere la chiara immagine di questo tipo di diagramma. Posso capire il significato dell'immagine, ma quando provo a leggere un diagramma (come quelli per quei codici Haskell), scopro che non posso immediatamente sapere che si tratta di un diagramma per la sequenza di Fibnonacci. Ecco perché mi chiedo il modo di "capire chiaramente" –

+0

Bene. Ma penso di non poter ancora capire chiaramente questo. Anche se ho terminato gli esercizi correlati nella seconda versione di SICP, penso di non poter progettare una definizione implicita per un po 'più difficile. Ad esempio, scrivendo in modo casuale questo flusso: a_0 = 1, a_n = a_0 + a_1 + ... + a_ (n div 2), non riesco a scoprire una definizione implicita. –

+0

Ancora grazie a te. –

1

per rispondere alla tua domanda nei commenti,

Prelude> let bs = 1:map (\n-> sum $ take (n+1) bs) (map (`div`2) [1..]) 
Prelude> take 20 bs 
[1,1,2,2,4,4,6,6,10,10,14,14,20,20,26,26,36,36,46,46] 

Prelude> let as = 1:1:g 2 (drop 2 as) where g x ~(a:b) = x:x:g(x+a)b 
Prelude> take 20 as 
[1,1,2,2,4,4,6,6,10,10,14,14,20,20,26,26,36,36,46,46] 

Prelude> take 20 $ map (\n-> sum $ take (n+1) as) $ map (`div`2) [0..] 
[1,1,2,2,4,4,6,6,10,10,14,14,20,20,26,26,36,36,46,46] 
Problemi correlati