第十七章
遞歸調用的問題並非僅僅隻是一個編程技巧的問題,羅漢堂內堂的這些精英們,誰也不會覺得自己寫出來的程序會產生死循環這種低級錯誤。
但是當一個很平常的技巧,一旦上升到數據結構和軟件架構的問題時,突然間就露出了它猙獰的麵孔。
而這些羅漢堂內堂的精英們,研究的也早就不是一段具體的程序要怎麼編寫,而是更加看重指導程序編寫的思想。
在遞歸調用中隱藏著一個會威脅到整個數學體係的危險,這個危險就是羅素悖論。
所謂羅素悖論其實很多人都耳熟能詳,就是那個:我給島上所有人不給自己刮臉的人刮臉,我也隻給這些人刮臉。那麼,理發師是否給自己刮臉呢?如果他不給自己刮臉,他就屬於“不給自己刮臉的人”,他就要給自己刮臉。而如果他給自己刮臉呢?他又屬於“給自己刮臉的人”,他就不該給自己刮臉。
也就是說,作為一個函數,理發師可以處理其他人,但是當他“自己調用自己”的時候,就陷入了兩難的困境。
這和ID越小丙提出的“後麵這句話是假的,前麵這句話是真的”一樣,全都會陷入一個無法判斷的悖論之中。
可這種問題隻是純數學問題,在現實中理發師大可不管這個問題,痛快的給自己刮個臉。而越小丙提出的這個問題,既然無法判斷,那我們大可置之腦後。因為隻要有人類的智力就能知道,這個問題毫無意義。
在人工智能大發展之前,侯世達曾經的曆史上,人們就已經解決了這個問題。之所以遞歸調用會出現無法判斷的悖論困境,最根本原因是計算機太過死板、極不靈活,而且絕對的照章辦事。
對於計算機來說,它使用規則、遵守規則,但卻無法操縱規則。人類能夠比計算機智力更高,一個原因就是,我們能夠靈活的處理“規則”。
侯世達腦海裏隻是將這些內容恍惚間過了一遍,實際上遞歸調用的解決辦法早就已經深植他的腦海。
大師兄:很簡單,遞歸出現悖論的根本,是因為沒有規則之上的規則。想避免這種情況發生,隻要給規則設置規則就行了。
越小丙:規則的規則?
小寒:似乎有些道理,大師兄能否詳細說說?
烏木:我好像有點一語驚醒夢中人!好久沒有這種朝聞道的感覺了!
侯世達嘴角上翹露出一絲笑容,他上輩子打死自己也不敢想象,羅漢堂內堂的精英們竟然會有一天像小學生一樣向自己請教。
要知道今天他們討論的東西可不是什麼編程技巧,而是像越小丙之前所說的那樣,是程序編寫標準化的一部分。可以想象,能夠討論這種東西的人背後,不是有著極高的地位,就是占據了關鍵的位置。
今天他隨口一句,說不定明天就會成為行業規範。這就是羅漢堂內堂的魅力,在這裏互相交流和智力激蕩的對象,沒有一個會是平凡人。
大師兄:比如說越小丙的這句,“後麵這句話是假的,前麵這句話是真的”。如果它的上麵有一個“元規則”,也就是定義規則的規則,那麼這個悖論就是不成立的。我們完全可以規定,遞歸調用隻能調用自身低層次規則,而不能對自身規則做調用。
這句話的前半句定義了後半句,這在規則上來說,它應該是高級規則。既然如此,後半句作為規則本身就不能再調用前半句。當出現這種互相調用的情況,元規則就可以對遞歸調用進行判斷,如果出現不符合元規則的悖論,那幹脆就放棄這次調用。
……
侯世達說的這些不過是曾經的曆史上相當淺顯的內容,羅素悖論實際上早在20世紀初就已經在數學上提出了解決的辦法。可是對於這個重生之後的軟件行業來說,卻是有些讓人振聾發聵。
他關於遞歸調用的處理方式發送完了半天,聊天室裏竟然都沒有人說一句話。
當然不是他寫的內容別人不感興趣,這從聊天室突然開始急劇增加的在線人數就能看得出來。而是許多看了聊天內容的人,都還在仔細的思考這裏麵蘊含的道理。要想提問和討論,他們至少要先弄懂這套理論吧?
越小丙:我需要冷靜一下,這個說法似乎是可行的,我要冷靜冷靜。
顯然他已經有些語無倫次了,元規則、規則體係,這在應用中未必沒有先例。但還是那句話,像侯世達這樣能夠歸納總結出來的,這還是第一次。若非是沒有理論支撐,越小丙也不會在廣泛應用的前提下,還要堅持對遞歸調用做出限製。
而侯世達提出的這個理論,顯然是解決了她麵臨的這個問題。可即使是羅漢堂內堂,能夠開創理論的人也是鳳毛麟角。