2012-04-01 25 views
7

SICP Chương 3.5.3 http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5.3Làm thế nào để hiểu sâu sơ đồ lưu lượng tín hiệu được mô tả trong SICP?

Trong phần Streams as signals, SICP đưa ra một lời giải thích nghe nhìn của Implicit style of definition - bởi vòng phản hồi. Nhưng tôi muốn biết làm thế nào để hiểu chính xác sơ đồ? Lợi thế thực sự là gì và có kiến ​​thức cơ bản nào không?

Hãy ví dụ khác, không phải trong Đề án, nhưng trong Haskell:

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

Chúng tôi cũng có thể vẽ sơ đồ tín hiệu dòng chảy cho cả hai. Làm thế nào chúng ta có thể tận dụng các đồ thị này?

Cảm ơn lời khuyên và thông tin!

+0

tìm kiếm * Kahn và mạng dataflow MacQueen *. –

Trả lời

4

Để xem thực sự giải thích nghe nhìn của biểu đồ, tại sao bạn không xem qua các video đi kèm? Họ đang ở here, bài giảng 6A và 6B. Đối với "lợi thế thực sự" của sơ đồ, tốt, họ là một đại diện trực quan của xử lý dòng, không có "kiến thức cơ bản" là cần thiết để hiểu chúng, AFAIK ký hiệu cho các sơ đồ này là một phần của tính đồng nhất của SICP, bằng cách đọc sách và xem các video bạn sẽ biết tất cả những điều cần biết về chúng.

+0

Cảm ơn. Tôi chỉ đọc SICP nhưng tôi có thể không có hình ảnh rõ ràng về loại sơ đồ này. Tôi có thể hiểu được ý nghĩa của bức tranh, nhưng khi tôi cố gắng đọc một sơ đồ (ví dụ như đối với những mã Haskell), tôi thấy rằng tôi không thể biết ngay rằng đó là một sơ đồ cho chuỗi Fibnonacci. Đó là lý do tại sao tôi tự hỏi cách '' hiểu rõ ràng '' –

+0

Vâng. Nhưng tôi nghĩ tôi vẫn chưa thể hiểu rõ điều này. Mặc dù tôi đã hoàn thành các bài tập liên quan trong phiên bản thứ hai của SICP, tôi nghĩ rằng tôi không thể thiết kế một định nghĩa tiềm ẩn cho một chút khó khăn hơn. Ví dụ: viết ngẫu nhiên luồng này: a_0 = 1, a_n = a_0 + a_1 + ... + a_ (n div 2), tôi không thể phát hiện ra định nghĩa ngầm định. –

+0

Vẫn còn cảm ơn bạn. –

1

Để trả lời câu hỏi của bạn trong các ý kiến,

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]