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

## 1. 問題背景

寫這篇文章的時候，窗外正下着小雨。

我盯着終端裏那行 `carton bundle`，忽然覺得有些荒誕——一門誕生於三千年前的占卜之學，正在被編譯成 WebAssembly 字節碼，準備在全球各地的瀏覽器裏運行。

## 爲什麼要做這件事

易經的演算邏輯並不複雜，核心不過是「蓍草法」的隨機分組與陰陽判斷。但市面上絕大多數的在線起卦工具，要麼是純前端的僞隨機，要麼是後端黑箱。我想做一個**完全透明、可審計、本地運行**的演算工具。

WebAssembly 是最合適的選擇。它能將 Swift 的強類型安全與計算精度帶入瀏覽器，同時保證所有演算在用戶本地完成，不需要任何網絡請求。

## 核心挑戰：陰陽的數學表達

易經的陰陽爻有四種狀態：

| 狀態 | 數值 | 含義 |
| :--- | :--- | :--- |
| 老陽 | 9 | 陽極生陰，變爻 |
| 少陽 | 7 | 陽爻，不變 |
| 老陰 | 6 | 陰極生陽，變爻 |
| 少陰 | 8 | 陰爻，不變 |

蓍草法的關鍵在於三次分組操作，每次操作的餘數決定了爻的狀態。這個邏輯用 Swift 實現起來非常乾淨：

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

## 關於「變」

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

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

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

---

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