用 Swift 編譯易經:WebAssembly 與古典術數的奇妙相遇
記錄將易經演算引擎編譯爲 WebAssembly 的開發歷程,以及在這個過程中對「變」的一些感想。
1. 問題背景
寫這篇文章的時候,窗外正下着小雨。
我盯着終端裏那行 carton bundle,忽然覺得有些荒誕——一門誕生於三千年前的占卜之學,正在被編譯成 WebAssembly 字節碼,準備在全球各地的瀏覽器裏運行。
爲什麼要做這件事
易經的演算邏輯並不複雜,核心不過是「蓍草法」的隨機分組與陰陽判斷。但市面上絕大多數的在線起卦工具,要麼是純前端的僞隨機,要麼是後端黑箱。我想做一個完全透明、可審計、本地運行的演算工具。
WebAssembly 是最合適的選擇。它能將 Swift 的強類型安全與計算精度帶入瀏覽器,同時保證所有演算在用戶本地完成,不需要任何網絡請求。
核心挑戰:陰陽的數學表達
易經的陰陽爻有四種狀態:
| 狀態 | 數值 | 含義 |
|---|---|---|
| 老陽 | 9 | 陽極生陰,變爻 |
| 少陽 | 7 | 陽爻,不變 |
| 老陰 | 6 | 陰極生陽,變爻 |
| 少陰 | 8 | 陰爻,不變 |
蓍草法的關鍵在於三次分組操作,每次操作的餘數決定了爻的狀態。這個邏輯用 Swift 實現起來非常乾淨:
func yarrowStalkOperation(_ stalks: UInt32) -> UInt32 {
let left = stalks / 2
let right = stalks - left
let remainderLeft = left % 4 == 0 ? 4 : left % 4
let remainderRight = right % 4 == 0 ? 4 : right % 4
return remainderLeft + remainderRight + 1
}
三次操作的結果相加,得到 6、7、8、9 之一,對應四種爻的狀態。
關於「變」
在調試這段代碼的過程中,我反覆思考一個問題:易經的核心是「變」,而程序的核心是「確定性」。
這兩者並不矛盾。蓍草法的隨機性來自於初始的隨機分組,而演算過程本身是完全確定的。就像量子力學——測量之前是疊加態,測量之後坍縮爲確定值。
也許這正是古人的智慧:承認隨機性的存在,但在隨機性之後尋找規律。
工具已經上線,可以在上方的「周易起卦」入口體驗。如果你對實現細節感興趣,歡迎繼續關注。