邏輯運算(Logic operation)
曾慶潭 Ching-Tang Tseng
ilikeforth@gmail.com
Hamilton, New Zealand
16 April 2026
本文所探討的邏輯運算,為『條件整合』所需的邏輯運算,而非『位元操作』方面使用的邏輯運算。
為了讓ABC FORTH數學計算系統增添這種邏輯運算的功能,我才慎重其事的重新探討此一主題。討論的內容仍然憑藉著邏輯運算的傳統原始定義,但討論的結果,可以產生創新的作法,並實際實現將系統中的邏輯運算指令,設計成以適當的中文意思來表達,且令其在程式中的使用方式,符合中文的語法規格。
大體而言,數學計算系統中的處理對象,若能夠被明確的劃分成各個獨立模組,系統便容易規劃、設計、發展。舉例而言,ABC FORTH數學計算系統,將整數、浮點數、複數…等數字處理對象,都當作各自獨立的模組來考慮,模組化後可以大大的簡化整個系統,讓各模組的問題,只須在各模組的範圍內自行解決。
因此,在ABC FORTH系統中,欲添加邏輯運算的功能時,最佳的作法,當然也就是繼續將這項主題,考慮成一個新建的單一模組來設計程式,讓邏輯運算的位階等同於整數運算、或浮點數運算、或複數運算,是一個獨立的新模組。
事實上,邏輯運算在實際的科學應用中,原本就與各種數字的運算不相干。數字運算計算3乘2得到6,1加1得到2,配合上其他所有的運算,形成一套完整的數學體系。邏輯運算執行0與1的各種運算後,也會得到一些運算結果,但這裡的0與1不表數字,而是表真或假、對或錯、是或非、有或無、開或關、高或低…等等所謂的邏輯相對狀態,0與1僅只是借自數字系統的兩個元素當作符號,這個1也可以使用除了0以外的其它任何數字來代表,但都與數字的大小或正負意義完全無關。總而言之,邏輯運算原本就與各種數字運算無關。
邏輯學是研究理論數學、應用數學、高深數學之基礎工具,也一直都是電腦科技發展的基石,電子邏輯電路工程更是經常需要用到邏輯運算設計產品。數學計算系統不應排除邏輯運算的功能,它係電腦以執行軟體程式的方式,實踐邏輯學問,沒有邏輯運算功能的系統,性能便有所欠缺。因此,將全部的邏輯運算功能建立在數學計算系統中,是有必要的,健全的邏輯運算功能,也有助於處理人工智慧方面的程式。我將加建邏輯運算功能的方法搞成極其簡明的方式,當然也就有助於各方面的應用發展。
2010年七月,我才開始設想『如何增建處理邏輯運算的功能進入系統?』的問題,自覺很容易實現這樣的設計。但是,那時只是初步的構思,只考慮仿照一般傳統程式語言的習慣,暫時僅融入『而且』(AND)與『或者』(OR)兩個單純指令。這篇文章則進行廣泛性的探討,包括如何給予適當的邏輯算子中文名稱?我個人認為,應該研究過它們在系統程式語言中之表達位置後,方給予適當的命名,才會比較恰當。讓指令的名稱符合語言上下文的啣接要求,這樣才能有助於設計出具有優良語法的程式系統。
一般而言,若只討論邏輯運算不同的名稱,基本邏輯運算的算子共有六個,它們是:
(1) AND (2) OR (3) XOR (4) NAND (5) NOR (6) NOT。
在FORTH程式語言中,邏輯算子(Operator)所需要的算元(Operand)操作對象,除了NOT只需要先行提供一個算元外,其他五個,都需要先將兩個算元操作對象放在堆疊上,然後才能執行邏輯運算。執行的結果都只得到唯一的狀態表示值,並將其留在堆疊上,供後續指令使用。換句話說,FORTH的邏輯運算,是一種後算符式的運算。1994年訂定的ANSI FORTH指令標準中,只將前三個當作標準基本指令,後三個可以導得,設計如下:
AND ( ( A > 5 ) , ( B > 5 ) )
OR ( ( A > 5 ) , ( B > 5 ) )
XOR ( ( A > 5 ) , ( B > 5 ) )
NAND ( ( A > 5 ) , ( B > 5 ) )
NOR ( ( A > 5 ) , ( B > 5 ) )
NOT ( A > 5 )
系統將這些函數式的邏輯算子執行完畢之後,都只得到一個唯一的狀態值,當然就能提供後續的THEN指令使用了。可是,這樣子使用之後,就完全失去了與人類語言直接對應的關係,結果就等同於傳統FORTH中的後算符使用方式,這兩種類型都與人類慣常語言完全不匹配。
另外還有一項因素,上述AND與OR兩個較完美中算符式的設計,也是一般傳統程式語言中所採用的格式,若不跟著以同樣的方式使用,想轉譯舊程式進入ABC FORTH系統時,就會產生困擾。因此,必須保留這兩個邏輯算子,成中算符的格式來使用。
其它的邏輯算子就不是這樣了,如果生平根本就不用英文思考問題,不必管它XOR、NAND、NOR、 NOT的實質意義為何?把這些算子都譯成『與…進行某種邏輯運算』,那麼,前三個指令就設計成也是中算符就很理想,例如:
( A > 5 ) XOR ( B > 5 )
表示條件( A > 5 ) 與條件( B > 5 )進行XOR邏輯運算
至於NOT,則只好維持原來FORTH後算符的方式了,我在ABC FORTH系統中,就將英文的邏輯運算指令,設計成這樣的使用格式,但深覺它忽略了中文,不尊重我們中國人的存在。
考慮在中文程式中使用這些邏輯運算指令時,若純用中文進行思考,便能夠深刻的體會出指令名稱、實質意義,與語言規格間的重要關聯。為顧全大局,要讓這四個指令都必須以『後算符』的格式來使用,才比較恰當。為什麼?請回頭仔細看看邏輯運算真假值對照表中顯示的各種狀態,您就可以明白其中的道理。
我在台灣讀過的書本中,幾乎所有與邏輯算子有關的譯名,大約都被固定的翻譯成非常怪異難懂的名稱了。『XOR』被譯成『互斥或』,『NAND』被譯成『反且』,『NOR』被譯成『反或』,『NOT』大概被譯成『非』吧。如果要拿這樣的譯名來設計中文程式,那我寧可不設計程式了,不信請讀一讀下列用法,看看您能不能直接讀出程式的意義來?
100 如果 ( A > 5 ) 互斥或 ( B > 5 ) 前往 700
講實在話,我讀不出來。
於是,我為這四個邏輯運算指令想好了比較一致、比較恰當的中文名稱,將它們都設計成後算符的使用格式,並且在兩個條件算元操作對象之間,添加一個逗號『 , 』當作分隔符號,完成了設計。此處再度複製一份真假值表,以便就近參考,請先行觀察四個指令在表中呈現的意義,然後再看看分別被譯成的適當中文名稱,對照如下:
XOR 一是一非
NAND 不為皆是
NOR 兩者皆非
NOT 不對
我在ABC FORTH系統中實現了這樣的設計,它們的使用規格則如下列:
100 如果 ( A > 5 ) , ( B > 5 ) 一是一非 前往 700
100 如果 ( A > 5 ) , ( B > 5 ) 不為皆是 前往 700
100 如果 ( A > 5 ) , ( B > 5 ) 兩者皆非 前往 700
100 如果 ( A > 5 ) 不對 前往 700
如此一來,這些邏輯運算就都符合我們的中文語法了,而且想進行連續邏輯運算的程式設計時,使用小括弧,清楚的將各個條件算元操作對象,按同樣格式區分開來,也能完成沒有次數限制的邏輯運算。以前,從未有人這樣子翻譯這四個邏輯算子的中文名稱,我現在則以邏輯算子在中文話語中的上下文關係,作為考慮基礎,譯名也包括了中文的直覺意義,可以通順的使用於程式語言中,這樣做算是創舉。
我在習慣於快速中文打字的操作後,已經不再認為:給予指令兩個字,例如:『不對』,會比只給單個字,例如:『非』,的譯名要差了。好的指令中文譯名,應該是清楚第一,通順至上。在以打字方式設計程式的作業環境中,字有幾筆、幾劃?更不重要,今人考慮的問題,早已與前人大不相同。
邏輯運算的功能,完全能應用在任何需要邏輯運算的場合,包括設計電子邏輯電路時的應用,使用者可以在未接觸硬體前,先以執行軟體程式的方式來實現。但是這種邏輯運算,屬於『位元操作』應用方式的邏輯運算,並非『條件整合』應用方式的邏輯運算。因此,在ABC FORTH數學計算系統中,就必須使用整數體系內的六個函數式的邏輯算子來設計程式,有別於此處探討的邏輯算子。
邏輯運算是數學運算中的一門分支,本文僅只處理了六種慣用邏輯算子,如果另有新的邏輯算子產生,隨時可以迎合要求,將其加入這個完全按照自己的理念設計出來的ABC FORTH數學計算系統。
我可以不堅持自己的譯名就是最好的選擇,大家若有更高明的見解,也可以經過討論後,重新設計進系統,這就是不必受制於人的好處,我們隨時辦得到。
這樣子的研究,純粹衝著我們中國人自己的文化而來,打從幾十年前開始學習電腦程式語言起,我心中便對中國人想使用電腦設計程式時,始終受制於西方文化設計出來的規範,感到忿忿不平,如果自己完全沒有能力在這方面進行改善,那就不必空談,只能拈香跟拜(台語,表示只能忍受一切羞辱,任人擺佈的意思)。
整理出這樣的研究,它的好處在那裡?完全無利可圖,所以何必曰利?但是,如果大家都不願正視這樣的研究,那麼,只好一輩子永遠拈香跟拜。
現在不一樣了,我早已習慣於在自己的電腦上大肆使用中文,譬如打文章、寫信、作記錄、看資料、看新聞、看程式…等等,我也有能力設計出可以完全只使用中文來當指令的程式語言,那麼,為什麼不更進一步的發展?也許我的個人研究不太成熟、不夠完美、不算甚麼,但是,至少我已經能夠這樣做了,上述的中文程式語言功能,我確確實實的實現了!而且,我會繼續思考,繼續努力,繼續設計,在數學計算系統方面,別人能做甚麼,我也絕對能設計得出對等功能的系統,性能還可以中文為主,並且直接超越別人的設計!
與數學計算相關的大部份實際程式中,必須使用到『條件整合』式邏輯算子的情況非常簡單,幾乎只要準備AND與OR的功能就夠了。在進行專家系統方面的程式設計時,反而更需要全部邏輯運算的功能,尤其是如果想用中文來設計專家系統時,除了要讓執行結果絕對符合專家資格,不出差錯外,對於日後的程式維護,也要講求精簡明確,那麼,這一篇文章內所強調的要點,就會很有價值。
沒有留言:
張貼留言