乙個過程(procedure)是乙個指令序列,它修改某些物件的狀態,也可能構造或
者銷毀一些物件.根據程式設計師的意圖,與乙個過程互動的物件分為四類.
1.輸入輸出(input/output),指該過程通過其引數或返回值直接或間接傳遞的那些物件.
2.區域性狀態(localstate),該過程在其一次呼叫期間建立、銷毀或修改的那些物件.
3.全域性狀態(globalstate),該過程和其他過程在多次呼叫中訪問的物件.
4.擁有的狀態(ownstate),僅供該過程(及其隸屬過程)訪問但又能被該過程的多次呼叫共享的物件.
如果乙個物件作為引數或結果傳遞,稱它是直接傳遞的;如果是通過指標或類似指標的機制傳遞,則稱它是間接傳遞的.如果乙個物件被某個過程讀但是並不修改,稱它是該過程的輸入.如果乙個物件被某過程寫入、建立或銷毀,但該過程並不訪問其初始狀態,則稱它是該過程的輸出.如果乙個物件被某過程既讀又修改,稱它是該過程的輸入/輸出.
乙個型別的計算基(computationalbasis)是有窮的一集過程,基於它們可以構造出該型別上的其他過程.一組基是高效的(e.cient),當且僅當基於它實現的任何過程的效率不比基於任何其他基寫出的過程低效.例如,對k-位無符號整數的一組只提供0,相等判斷和後繼操作的基就不是高效的,因為基於後繼函式實現加法的複雜性是k的指數函式.
一組基是有表達力的(expressive),當且僅當基於它可以緊湊而方便地定義相關型別上的其他過程.特別是,如果合適的話,乙個基應該提供所有常用的數**算.舉例說,雖然減法運算可以通過求負和加法實現,但在乙個有表達力
《程式設計原本 》一導讀
本書將演繹方法應用於程式設計,討論程式與保證它們能正確工作的抽象數學理論之間的聯絡.書中把反映這些理論的規程 speci.cation 基於這些理論寫出的演算法,以及描述演算法性質的引理和定理一起呈現給讀者.這些演算法在一種實際程式語言裡的實現是本書的中心.雖然規程主要是供人閱讀,但它們也應該 或者...
《程式設計原本 》一2 3 碰撞點
如果不知道定義而只能觀察其行為,我們無法確定乙個變換的一條特定軌道是否無窮,因為它完全可能在任意一點結束或者迴圈.如果知道一條軌道是有窮的,那就可以用乙個演算法來確定該軌道的形狀了.因此,本章針對軌道的所有演算法都有乙個有關軌道有窮性的隱含前條件.顯然可以寫乙個簡單而平凡的演算法,讓它儲存已訪問的每...
《程式設計原本 》一1 5 規範型別
存在這樣一組過程,如果把它們包含到乙個型別的計算基中,就能方便地把物件放入各種資料結構,或者通過演算法把物件從乙個資料結構複製到另一資料結構.我們稱具有這樣的基的型別為規範的 regular 因為使用這樣的型別可以保證程式行為的規範性,進而獲得型別之間的互操作性.1 可以從內部型別,如bool in...