2012-04-01 9 views
7

SICP Kapitel 3.5.3 http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5.3Wie kann ich das in SICP beschriebene Signalflussdiagramm verstehen?

In Abschnitt Streams as signals gibt SICP eine audio-visuelle Erklärung von Implicit style of definition - durch Rückkopplungsschleife. Aber ich möchte wissen, wie man das Diagramm genau versteht? Was ist der wirkliche Vorteil und gibt es Hintergrundwissen?

ein anderes Beispiel, nicht in Schema, aber in Haskell:

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

Wir können auch das Signal-Flussdiagramm für entweder zeichnen. Wie können wir diese Graphen nutzen?

Danke für Rat und Informationen!

+0

Suche nach * Kahn und MacQueen Datenfluß Netzwerke *. –

Antwort

4

Für eine echte audiovisuelle Erklärung der Diagramme, warum sehen Sie sich nicht die begleitenden Videos an? Sie sind in here, Vorlesungen 6A und 6B.

Was den "wirklichen Vorteil" der Diagramme betrifft, sind sie eine visuelle Darstellung der Stream-Verarbeitung, kein "Hintergrundwissen" wird benötigt, um sie zu verstehen. AFAIK die Notation für diese Diagramme ist Teil der Idiosynkrasien von SICP, indem Sie das Buch lesen und die Videos ansehen, wissen Sie alles über sie.

+0

Danke. Ich lese gerade die SICP, aber ich habe vielleicht kein klares Bild von dieser Art von Diagramm. Ich kann die Bedeutung des Bildes verstehen, aber wenn ich versuche, ein Diagramm zu lesen (wie diejenigen für diese Haskell-Codes), merke ich, dass ich nicht sofort wissen kann, dass es ein Diagramm für die Fibnonacci-Folge ist. Deshalb frage ich mich, wie man '' klar verstehen'' –

+0

Nun. Aber ich denke, ich kann das immer noch nicht klar verstehen. Obwohl ich die entsprechenden Übungen in der zweiten Version von SICP abgeschlossen habe, denke ich, dass ich keine implizite Definition für ein etwas schwierigeres entwickeln kann. Wenn Sie zum Beispiel diesen Stream zufällig schreiben: a_0 = 1, a_n = a_0 + a_1 + ... + a_ (n div 2), kann ich keine implizite Definition finden. –

+0

Danke immer noch. –

1

Ihre Frage in den Kommentaren zu beantworten,

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] 
Verwandte Themen