2012-04-01 12 views
7

SICP Capítulo 3.5.3 http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5.3¿Cómo entender profundamente el diagrama de flujo de señal descrito en SICP?

En la sección Streams as signals, SICP da una explicación audiovisual de Implicit style of definition - por bucle de realimentación. Pero quiero saber exactamente cómo entender el diagrama. ¿Cuál es la ventaja real y hay algún conocimiento de fondo?

poner otro ejemplo, no en el esquema, pero en Haskell:

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

También puede dibujar el diagrama de flujo de señal para cualquiera. ¿Cómo podemos aprovechar estos gráficos?

¡Gracias al asesoramiento y la información!

+0

búsqueda de redes de flujo de datos * * MacQueen Kahn y. –

Respuesta

4

Para un real explicación audiovisual de los diagramas, ¿por qué no echas un vistazo a los videos que los acompañan? Están en here, conferencias 6A y 6B.

En cuanto a la "ventaja real" de los diagramas, bien, son una representación visual del procesamiento de flujo, no se necesita "conocimiento de fondo" para entenderlos, AFAIK la notación para estos diagramas es parte de la idiosincrasia de SICP, leyendo el libro y viendo los videos sabrá todo lo que hay que saber sobre ellos.

+0

Gracias. Solo estoy leyendo el SICP pero es posible que no haya tenido una idea clara de este tipo de diagrama. Puedo entender el significado de la imagen, pero cuando trato de leer un diagrama (como los de esos códigos Haskell), descubro que no puedo saber de inmediato que es un diagrama para la secuencia de Fibnonacci. Es por eso que me pregunto la manera de '' entender claramente'' –

+0

Bueno. Pero creo que aún no puedo entender esto claramente. Aunque terminé los ejercicios relacionados en la segunda versión del SICP, creo que no puedo diseñar una definición implícita para una más difícil. Por ejemplo, escribiendo aleatoriamente esta secuencia: a_0 = 1, a_n = a_0 + a_1 + ... + a_ (n div 2), no puedo descubrir una definición implícita. –

+0

Aún gracias a usted. –

1

Para responder a su pregunta en los comentarios,

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] 
Cuestiones relacionadas