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