關於sicp stream流的相關思考

2021-10-12 12:22:39 字數 1347 閱讀 3724

關於流所具有的性質以及它和惰性求值的關係。

惰性求值提到了delay 和force,它們的實現方法也比較簡單,無非就是把函式求值的那個瞬間,用lambda表示式標記了,然後讓force來觸發即可。

它的引申意義是非常有趣的。

它是在資料本身要做的事情功能之上,又提公升了一層,這個提公升的意義概括了所有的資料。這個提示的維度實在是有點有趣。我努力說清楚。

比如sicp中文書上p62的那個

(define (cons x y)

(lambda (m)

(m x y)))

(define (car b)

(b (lambda (x y)

) x)

))

這裡的cons和car幾乎是靠它們對對方的意義來形成自己的,cons和car的實體的意義是不存在。程式的本質是互動和溝通,除去了額外的資料以外,它的元件之間的關係應該就是反映這種互動和溝通的。

上述說法完完全全扯遠了。

我想說的意思是,流的force和delay也和car 和cons 後面的函式一樣,是兩個洞,兩個相互關聯的關係,而這個關係是由時間去填充的。

可以說,如果說car 和cons之間的互相定義是為了抽象出它們之間的關係,那麼force和delay之間的相互定義,是為了抽象出時間與它們之間的關係。但就像前者的關係是模式匹配著去處理資料一樣,後者也僅僅是在流這個形式中去想象時間的可能。

再者,思考這個有關時間的抽象,具有的強力是怎樣的?如果我們把cons定義為有賦值概念的(p179),它就有了更改狀態的能力,整乙個程式變成了指標的控制的技巧。

同理,如果我們把cons定義為有流和時間控制概念的,它具備了怎樣的能力呢?是無限的能力嗎?整個程式設計的重心又在那裡了呢?

程式的需求大致可以分為兩種,一種是資料處理,一種是邏輯處理。計算則是上述兩者通用的技巧,在前者那裡是模式設計的技術,在後者那裡是語言歸納的技術。惰性求值的改變,改變的似乎就是計算?

那我再問,在lisp中帶來的惰性求值上的連同它的資料表結構的變化,和我只是借用了惰性求值的技巧,在任何乙個支援函式式程式設計的程式裡呼叫lambda或者閉包或者cps來延遲求值之間的變化,這兩者之間到底差異在**呢?假設我要做乙個遊戲……它們的畫面表現是可以完全相等的嗎?(這個假設肯定要找個合適的題材進行下去……)

假設我要在其他程式中實現這個惰性求值。我會這樣思考,它們是不是乙個生成器呢?

比如我有乙個函式a ,我每次呼叫它,它就會產生乙個值,這個值在函式內部是有狀態的,每次呼叫時候會增加1。這樣它在表面上好像和force有點像?假設我有乙個機器,準備呼叫這個函式,每次都呼叫……,然後把呼叫得來的結果也進行過濾處理,如果不符合要求就重新呼叫函式。

好了,不成熟的思考就在這裡。提出了很多問題,期待以後能自己慢慢回答。

定位流之子絕父相

定位流 position 分類 1.相對定位 relative 不脫離標準流,還會佔空間配合,相對在標準流的位置運動 top,right同乙個方向上只用乙個屬性等使 相對以前在標準流的位置來移動 在相對定位中用margin和padding屬性會影響整個網頁布局 應用場景 1 用於對元素微調 2 配合...

關於瀑布流

鑑於現今瀑布流的流行,上次面試的時候又遇到了這個問題,可我確實沒有實現過,一時問起確實只知道用float left的方式。1.固定列寬和列數,列設定float left,乙個列就是乙個內容塊,載入內容就選擇載入到各列中 2.使用css3的多列布局 前兩種方式比較簡單,而所謂最大的缺陷也就是列數目已確...

關於ticktuple定時寫hbase相關問題

關於 ticktuple 定時寫hbase 相關問題 問題描述 storm為5 臺節點,如果 ticktuple 所屬bolt 的並行度為 2,則只會在這兩台節點上對 bufferemutator 進行初始化,導致其餘三颱節點不會觸發定時寫操作 解決方案 設定 ticktuple 定時bolt 的並...