← 文章 開發感想

用 Swift 編譯易經:WebAssembly 與古典術數的奇妙相遇

記錄將易經演算引擎編譯爲 WebAssembly 的開發歷程,以及在這個過程中對「變」的一些感想。

術數工具

基於 WebAssembly & 原生 iOS,探索星曆之美

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 之一,對應四種爻的狀態。

關於「變」

在調試這段代碼的過程中,我反覆思考一個問題:易經的核心是「變」,而程序的核心是「確定性」。

這兩者並不矛盾。蓍草法的隨機性來自於初始的隨機分組,而演算過程本身是完全確定的。就像量子力學——測量之前是疊加態,測量之後坍縮爲確定值。

也許這正是古人的智慧:承認隨機性的存在,但在隨機性之後尋找規律。


工具已經上線,可以在上方的「周易起卦」入口體驗。如果你對實現細節感興趣,歡迎繼續關注。