以图灵的方式编程
馮·諾依曼體系是圖靈機的實現(xiàn),但從實現(xiàn)之初,兩者便無多大交集,圖靈機具有理想性質(zhì),是不考慮控制和執(zhí)行成本的,而馮·諾依曼機器,最初的程序設(shè)計對計算成本是非常關(guān)注的,而且按照圖靈機思想設(shè)計的程序,轉(zhuǎn)換成通常的程序,會比較復雜而且顯得不直觀。正如lex與bison生成的程序代碼,我們只會認為程序是對的,而很少會去閱讀。
以控制機器的思想設(shè)計程序,是圖靈機程序設(shè)計的主要方式,而對于計算細節(jié)(主要是比較運算)和控制細節(jié)(主要是條件轉(zhuǎn)移)的實現(xiàn)則基本不予關(guān)注。以機器的思想設(shè)計程序,以機器的思想而不是以庫函數(shù)的方式構(gòu)建系統(tǒng)的結(jié)構(gòu),其實在編譯、業(yè)務邏輯表示、流程等很多方面都可以讓問題得到簡化。而用于執(zhí)行的程序本身,則如數(shù)據(jù)一樣,可以動態(tài)動態(tài)組裝、動態(tài)執(zhí)行。
在本質(zhì)上馮·諾依曼體系與圖靈機并無大的區(qū)別,但在形式上卻有比較大的區(qū)別,可以這樣說,圖靈機側(cè)重規(guī)則的描述,而馮·諾依曼體系編程則側(cè)重于規(guī)則的執(zhí)行,在計算機的計算能力受限制的過去,我們關(guān)注于執(zhí)行,關(guān)注于算法。而今我們是否是更應關(guān)注于我們所要解決的問題,及其這些問題的上下文,以及解決這些問題相關(guān)知識的描述。
現(xiàn)在我們試著以圖靈機的方式書寫一個程序,掀開面紗,看看她的真容:
/*因為真實的圖靈機過于原始,為方便編程,在程序中做了以下約定:1、圖靈機有輸入的條帶,有輸出的條帶。2、非特別指定,匹配動作只在輸入條帶上執(zhí)行。3、非特別指定,打印只在輸出條帶上執(zhí)行。4、預定義匹配: =,>,< .。 =,>,< 操作語義,與序列比較的含義一致。. 不匹配條件。 5、預定義狀態(tài):s0, e0 ,f0s0 表示開始狀態(tài)。e0 表示正常結(jié)束狀態(tài)。如未有跟隨的動作,則自動在輸出條帶上打印字符 '1'。f0 表示非正常結(jié)束狀態(tài)。如未有跟隨的動作,則自動在輸出條帶上打印字符 '0'。6、預定義動作: -> <- #-> 表示條帶指針右移一格。<- 表示條帶指針左移一格。# 表示把輸入條帶當前指定的內(nèi)容,打印到輸出條帶上,同時輸出條帶的指針右移。? 對整個輸出條帶的數(shù)據(jù),做相應的轉(zhuǎn)換。7、句型:定義: <標志符> <參數(shù)> <參數(shù)> ... 句子: <當前狀態(tài)> <匹配表達式> <下一狀態(tài)> <動作> <動作> ...--: 函數(shù)用 '--' 間隔 *///>=操作 !>= x ------------- s0 x e0 s0 >x e0 --------------//<=操作 !<= x -------------------------- s0 x e0 s1 <x e0 -------------------------//范圍操作 !.. x y --------------------------- s0 x e0 s0 y e0 s0 >x n1 n1 <y e0 ---------------------------//字母 !letter -------------------------- s0 'a'..'z' e0 s0 'A'..'Z' e0 --------------------------//數(shù)字 !digital -------------------------- s0 '0'..'9' e0 --------------------------//字母數(shù)字 !letterdigital ---------------------------- s0 letter e0 s0 digital e0 ----------------------------//標志符 !indent ---------------------------- s0 letter n1 -> # n1 letterdigital n1 -> # n1 . e0 <- ?string ----------------------------//數(shù)字 !number ---------------------------- s0 digital n1 -> # n1 digital n1 -> # n1 '.' n2 -> # n1 . e0 <- ?int n2 digital n2 -> # n2 'e' n3 -> # n2 'E' n3 -> # n3 digital n3 -> # n2 . e0 <- ?double n3 . e0 <- ?double ----------------------------
上面只是一個偽程序,但可以看出,這樣的編程方式比較適合于以規(guī)則為主體的各種應用,比如編譯、業(yè)務規(guī)則、業(yè)務流程等方面,同時作為自動機的控制輸入也是比較合適的。
總結(jié)
- 上一篇: 贝叶斯定理与贝叶斯估计
- 下一篇: java 矩阵计算 加减乘除 反转 分解