SICP歸納 4 模式匹配和以規則為基礎的代換

2021-09-23 23:02:34 字數 950 閱讀 4894

在書中符號資料一節中,作者寫了關於微積分的演算規則的程式。這是乙個很程式化的程式,我們所做的是在講這些(數學)規則翻譯成計算機語言。因為它有程式化的行為和結構,那麼存在其他的方法使書寫這個程式更加清晰嗎?這些規則都具有左右兩側。左側是我們想要採取的導數的表示式,有右邊則是其的替代。

用可以匹配的模式,和能夠代換的框架,可以得到新的表示式。所以這意味著模式是對源表示式的匹配,並且規則的應用的結果是去產生乙個新的表示式,而這個表示式是通過例項化乙個框架來傳入的目標引數。這就是所謂的例項化。而整體範圍上這就是由規則所描述的過程。

我們試圖找出解決一類問題的解決方案而不是乙個個例的解決方案。書中採用的是關於負數運算的例子。在這個例子中,作者很好的封裝了例項化、結構控制等思想,並且是用各自的規則進行的單獨封裝。

所以儘管是乙個複雜的程式,但是每個複雜的程式都是由大量的簡單片段所構成。這裡的遞迴模式倒是很複雜,但明智的一點便是不去想這件事。如果總是想著要做的事情的實際的模式,我們便會變得很困惑。也許這並不是一項很好的實踐。這些模式很困難,但我們沒必要去想它們。關鍵是有乙個好的程式設計技巧和優良的設計,並且知道什麼不用去想。

沒有必要知道每乙個過程都該如何去執行,或者也可以去嘗試這些模式。無論如何,這已經演變為程式設計這一層次上的遞迴,不斷的將問題分解。

作者舉了乙個字典的例子:

在擴充套件字典時,我不得不去用乙個模式、乙個基準、一本字典。這個模式就是乙個模式變數。我想要去找出這個模式變數的名字並且看看它是否存在,如果不存在則新增乙個新的,如果存在,那麼這便是我要找的字。當然,這是建立在這是我所期待的字典時。(比如說,我要查乙個漢字的意思,卻去成語詞典中查則成語詞典不是我所期望的。)

所以如果開啟任何程式,我們所要找的就是它們中的一些小塊,並且這一切都很容易。至於什麼叫做簡化的表示式,在復合表示式中,所有的片段都是簡化的,並且這些規則會應用於它們的結果。對於所有的簡化表示式,僅僅是用了所有的規則——去簡化它們。所以簡化表示式的規範是任何表示式通過所有這些規則而被分解出的簡化的片段。

shell之匹配模式和擴充套件匹配模式

首先說一下什麼是匹配模式,然後再介紹擴充套件匹配模式。匹配模式這個概念就算不知道,但是也都會使用這個功能找到匹配的檔案。例如 ls ab 找到所有以ab開頭的檔案。這就是利用了 可以匹配任意字串,包括空串。匹配模式是man bash中的pattern matching,星號的含義在上面講了。用來匹配...

Scala基礎應用(4) 樣本類和模式匹配

就是在普通類前加了case case class test param1 int,param2 string 省略掉new,樣本類例項化不需要在前面加new,直接產生物件。引數自動加val,即樣本類的引數預設是不可修改的 自動加上tostring,equals,hashcode三個方法 模式在變數定...

檢索資料和模式匹配

檢索資料 最簡單的查詢形式由兩部分組成 1.select列表,指定所要檢索的列 2.from子句,指定所要訪問的表。可以使用select,from兩個關鍵字,編寫最簡單的查詢 select from 星號 表示選擇表中的所有列 使用where子句 where子句為選擇的行指定條件。where子句可以...