
第2篇
運算和運算能力
我們已經在本書的第 1 篇看過許多熟悉的運算範例:命令式程式設計語言、狀態機、通
用型電腦。這些範例讓我們知道運算或多或少就是使用系統來操作資訊並回答問題的過
程。
現在,我們將在第 2 篇多一點大膽冒險。我們一開始將在陌生之處尋找運算能力,然後
在結束時探索運算機器可以完成的基本限制。
身為程式開發人員,設計成適合我們世界心智模式的語言和機器是我們的工具,我們期
待它們配備的功能可以很容易將我們的想法轉變成實作物。這些以人為中心的設計都是
以便利(而非必須)為動機;甚至圖靈機的簡單設計也是為了讓我們想起使用筆和紙的
數學家。
但友善、熟悉的機器並不是唯一可以進行運算的地方。再罕見的系統,即使它們內部的
運作不易讓人控制或瞭解,也可以具備強大的運算能力。我們將在第 6 章試著以似乎完
全沒有任何實用功能的極微小語言來編寫程式,進而研究這個想法,並且進一步的在第
7 章評估各種簡單的系統,然後討論它們如何以複雜機器的方式來執行這些簡單系統所
執行的相同運算。
只要我們自己確信許多不同類型的系統都可能出現完整的運算能力,我們就將用盡第 8
章來檢查運算本身的實際能力。假設只要有足夠的時間並致力編寫適當的程式,電腦基
本上就可以解決任何問題,但結果卻有難以克服的理論限制:無論電腦多快、多有效
率,某些問題就是無法經由任何電腦獲得解決。