陳凱



《紅樓夢》中有“弱水三千,我只取一瓢飲”之語。“一瓢飲”最早見于《論語》中“一簞食,一瓢飲,在陋巷,人不堪其憂,回也不改其樂”。“弱水”一詞有不同的含義,但都有飄渺不定的意味,《山海經》中有“昆侖之北有水,其力不能勝芥,故名弱水”,蘇軾詩句中有“蓬萊不可到,弱水三萬里”。據說《紅樓夢》最早開創性地將“取一瓢飲”和用情專一聯系起來,之前古人更多將“一瓢飲”與貪念的斷除相聯系,如有寓言故事說,某個十分口渴之人在面對一整個大湖的充沛水量時卻總是無法下定主意要喝哪一瓢水。與“取一瓢飲”能遙相呼應的,是在計算模型的構造過程中,能不被紛繁復雜的諸多現象迷惑,而“專情”一種計算現象并加以利用的能力。
一個簡單的觸碰裝置
想象這樣一個場景,某人在游戲機房無聊閑逛,遇見一個從未見過的裝置,裝置上有兩個畫著手掌圖案的觸碰面板,裝置左上方和右上方各有兩盞燈。裝置的樣子如圖1所示,這里稱之為觸碰裝置A。這個裝置在未被觸碰時,兩個燈都是不亮的,若按住左面手的圖案或右面手的圖案,裝置右上方的燈會亮,當他同時用兩個手按住面板時,裝置左上方的燈會亮。作為一個游戲裝置,這未免有些無趣,一個稍微有趣一點的問題是,這個裝置到底有怎樣的用處?
例如,可以想象這個裝置是用來進行二進制加法計算的,對于學習過二進制計算的人來說,更容易產生這樣的聯想,表1展示了動作和亮燈的關系,的確正對應著兩個一位的二進制數進行加法計算得出兩位二進制數結果的過程。
關于觸碰裝置的頭腦風暴
撇開二進制加法的問題,單純地關注觸碰裝置A的工作過程,想象一下,既可以單獨使用這個觸碰裝置A,或者也可以將多個觸碰裝置A級聯,就是說將某些觸碰裝置A的輸出信號接到某些觸碰裝置A的輸入面板(某個觸碰裝置的燈的亮或暗,能影響另一個觸碰裝置的面板自動產生按住或松開的動作),那么,可以利用這些裝置實現哪些場景中的具體功能呢?筆者針對自己的學生開展了一項給予充分思考時間的頭腦風暴的調查,結果如圖2所示,其中,大約35%的被調查者放棄了回答,差不多一半的被調查者雖然試圖列舉了可能的具體功能,但較難詳細描述工作過程和功能之間的關系,只有差不多15%的被調查者不僅列出了這些裝置可能實現的功能,也比較詳細地描述了裝置的工作過程。將調查換一個角度進行還能得到另一個有意思的結果,即便學生學習過二進制加法運算,也只有10%左右的學生主動聯想到這個裝置可用于二進制運算。
這里從調查結果中選取一些較為有趣的回答,如有學生認為可以用這個裝置實現物品或人員的分類,有學生認為可以用來實現一個密碼解鎖的裝置,還有學生提出,如果將這些裝置間隔一定距離架設,就能實現信號的放大和傳遞,這個回答展現出這樣的情況:即便是拋棄了裝置的核心功能,也還是有可能發現其某些特殊的用途。
有一個回答值得重點展開討論:這個裝置其實也可以指示“少”和“多”、“局部”和“全體”之類的關系。不妨做這樣的假設,徜徉于游戲廳的某人后來發現,剛才所“玩”的設備,其實被遮擋住了一部分,當整個裝置都顯露出來后,就能見到裝置上有著三個觸碰面板和三個燈,這里稱之為觸碰裝置B,如圖3所示。此人發現,需要兩個人用三只手合作來和這個裝置互動。
觸碰裝置B的反應規則如表2所示。當只有一個面板被按住時,最右側的燈亮;當有兩個面板被按住時,中間的燈亮;當三個面板都被按住時,最左側的燈亮。可以用表格展示動作和亮燈的關系,可以看出,所亮燈的位置可以用來指示觸碰面板的個數。這與二進制加法規則顯然是不一致的,如果它真是一個二進制加法器,那么當被觸碰面板個數為3時,亮起的應該是中燈和右燈。
在經過這么一番互動和思考后,人們反而可能打消認為此裝置是一個二進制加法器的念頭。不妨將此裝置稱為觸碰裝置B。甚至于還能繼續擴充其計數能力,如裝置C可以記錄四個面板的觸碰數量,裝置D可以記錄五個面板的觸碰數量……不過,裝置最右側兩列燈和觸碰面板的局部行為和二進制加法器的行為仍然是完全一致的。若有人問,這些裝置到底算不算是二進制加法器?該如何回答這個問題呢?因為很難說這到底是一個觸碰計數裝置,還是觸碰加法裝置,所以干脆稱其為觸碰交互裝置。
用觸碰交互裝置的部分功能組裝成為其他裝置
毫無疑問,如果將觸碰裝置B的左側部分遮掩,它們就又變回了觸碰裝置A,但如果被遮掩的是其他部分呢?例如,遮住左燈、中燈和左面板,它就成了一個可以進行異或邏輯運算的裝置;遮住左燈、右燈和左面板,它就成了一個可以進行與邏輯運算的裝置。其部分變化規律如下頁圖4所示。
這樣,將多個觸碰交互裝置組合連結起來,就能開發出各種功能不同的計算裝置了。例如,下頁圖5所示的是用三個觸碰交互裝置組合而成的三個一位二進制數的加法器,又稱全加器——既然觸碰裝置B被部分遮擋后能當加法器使用,那么多個被部分遮擋的觸碰裝置B也就能組合成為具有更復雜功能的加法器了。對于更復雜的觸碰交互裝置,當然也同樣能夠借助遮掩而只使用其部分功能的方法,使之成為全加器。
下頁圖6所示是利用這個觸碰交互裝置實現或非運算和非運算,再將或非運算和非運算的計算裝置級聯,最終實現或運算計算裝置的例子。
或非門是一種通用的邏輯門,只使用單一的或非門的組合,就可以搭建出任意的邏輯門元件。不妨戲稱為“邏輯三千,我只取或非一種用”。另一種通用邏輯門是與非門,同樣可以借助觸碰交互裝置的遮掩和連結搭建出來。
假設某裝置有n個二進制輸入端和m個二進制輸出端,假設對于任何一種輸入和輸出的對應關系都能找出一套邏輯運算裝置或裝置的組合能滿足這種對應關系,則這個裝置是邏輯完備的,或非門就是一種邏輯完備的計算裝置。既然通過遮掩和組合的觸碰交互裝置能實現或非計算,那么,觸碰交互裝置當然也是邏輯完備的。
回到文章開頭的話題,“弱水三千,我只取一瓢飲”,自然界事物的行為雖然千變萬化,但對于某些事物,施加以某些動作作為“輸入”,它總能有規律地產生某些行為作為“輸出”,當這些“輸入”和“輸出”的行為恰好對應某個計算需求的時候,就能使用這個事物的這種特定的行為實現某種計算。