Как глубоко понять диаграмму потока сигналов, описанную в SICP? - PullRequest
7 голосов
/ 01 апреля 2012

SICP Глава 3.5.3 http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5.3

В разделе Streams as signals SICP дает аудиовизуальное объяснение Implicit style of definition - с помощью контура обратной связи.Но я хочу знать, как точно понять диаграмму?В чем реальное преимущество и есть ли какие-то базовые знания?

Возьмем другой пример, не в Схеме, а в Хаскеле:

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

Мы также можем нарисовать диаграмму потока сигналов для любого из них.Как мы можем воспользоваться этими графиками?

Спасибо за совет и информацию!

Ответы [ 2 ]

4 голосов
/ 01 апреля 2012

Для реального аудиовизуального объяснения диаграмм, почему бы вам не взглянуть на сопровождающие видео? Они в здесь , лекции 6А и 6В.

Что касается «реального преимущества» диаграмм, ну, они представляют собой визуальное представление обработки потока, для их понимания не требуется «фоновое знание», AFAIK нотация для этих диаграмм является частью специфических особенностей SICP Читая книгу и просматривая видео, вы узнаете все, что можно о них знать.

1 голос
/ 13 января 2013

Чтобы ответить на ваш вопрос в комментариях,

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]
...