威威學長|跨科學習系列
$$S + V + O$$
這不是數學,是英文句子的骨架。主詞、動詞、受詞。
會說「這條式子很眼熟」的人,通常文法也記得比較牢。原因不神祕:死背靠記憶,記憶會衰退;理解靠邏輯,邏輯用不壞。而英文的核心文法,大部分真的可以被寫成這種樣子:骨架不動,內容可換。
我在德國慕尼黑工大(TUM)讀數學的時候,課堂上幾乎都在做符號操作:教授寫一個定義,學生推導性質,性質變成定理,定理再套到下一個問題。後來我把同一種想法搬到英文文法上。如果一條規則可以用類似公式的方式寫出來,它就變成可以推導的東西;寫不出來的,才真的是需要死記的例外。
時態是一個時間變數
$$V(t) \quad \text{其中} \quad t \in \{\text{past, present, future}\}$$
$t$ 是時間,$V$ 是動詞。給不同的 $t$,動詞就跟著變形:
- $t = \text{present}$ → $V(s/es)$(第三人稱加 s)
- $t = \text{past}$ → $V\text{-}ed$ 或不規則變化
- $t = \text{future}$ → will + $V_{\text{原形}}$
這樣看,時態就不是 16 種要死背的組合,而是一個「帶時間參數的函數」。你要做的只是選對 $t$。
十條規則,套上公式
現在簡單式:常數函數
$$S + V(s/es) + O \quad \text{(常態)}$$
描述恆常為真的事、習慣、事實。對應數學裡的常數函數 $f(x) = c$。
Water boils at 100°C.
不管什麼時候、什麼地點,水的沸點都是 100°C。
第三人稱單數的 $s/es$ 是一個條件運算子:
$$V' = \begin{cases} V + s/es & \text{if } S \in \{\text{he, she, it}\} \\ V & \text{otherwise} \end{cases}$$
否定與疑問:do/does 吸收變形
否定:$S + \text{do/does} + \text{not} + V_{\text{原形}} + O$ 疑問:$\text{Do/Does} + S + V_{\text{原形}} + O?$
關鍵在這裡:do/does 出現之後,主要動詞要退回原形。為什麼?因為 does 已經把第三人稱單數的資訊帶走了,speaks 不需要再掛一次 $s$。
$$\text{Does} + S_{\text{3rd}} + V_{\text{原形}} \quad \text{(does 吸收了 } V \text{ 的變形)}$$
很多學生寫出 "Does she speaks?",這是把同一個變形掛了兩次。
過去簡單式:位移運算子
$$S + V\text{-}ed + O$$
過去式把動作從「現在」平移到「過去」。規則動詞加 $ed$,不規則動詞有自己的對照表。
$$V_{\text{past}} = V + \text{shift}_{\text{past}}$$
否定和疑問:did 出現之後動詞退回原形,理由跟 does 一樣,did 已經吸收了過去式的位移運算。
未來式:will 是預測運算子
$$S + \text{will} + V_{\text{原形}} + O$$
$$T_{\text{future}} = T_{\text{now}} + \text{will}$$
will 是外推(extrapolation),根據一般規律預測;be going to 是內推(interpolation),根據現有證據預測。兩者的確定感來源不同。
情態動詞 + 原形:模組組合
can, could, may, might, must, should, would 加上原形動詞,是英文裡最常見的組合之一:
$$\text{modal} + V_{\text{原形}} = \text{情態表達}$$
- can + go → can go(能力)
- must + study → must study(必要)
- should + rest → should rest(建議)
當 modal 用過去式形態(could, would, might),表達就變得更「不確定」或「更禮貌」:
- could + go → could go(過去能力/委婉)
- would + go → would go(意願/假設)
- might + go → might go(可能性較低)
數學上,這像是給函數加上一個模組參數:
$$V_{\text{modal}} = \text{modal}(V)$$
modal 是修飾運算子:它改變 $V$ 的語氣,但不改變 $V$ 的時態。
對過去的推測:modal + have + 過去分詞
$$\text{modal} + \text{have} + V\text{-}pp$$
- would have + gone → would have gone(過去的假設結果)
- should have + studied → should have studied(過去應該做但沒做)
- could have + won → could have won(過去有能力但沒做到)
- must have + left → must have left(過去一定發生了)
$$V_{\text{modal-past}} = \text{modal}(\text{have} + V\text{-}pp)$$
這是「模組組合」再加一層「時間位移」的雙重運算。掌握這一條跟上一條,情態動詞的核心用法就差不多了。
現在完成式:累積總和
$$S + \text{have/has} + V\text{-}pp + O$$
$$\text{experience} = \sum_{t=t_{\text{start}}}^{t_{\text{now}}} \text{events}(t)$$
I have visited 15 countries.
從我出生到現在,總共去過 15 個國家。這是累積值。
關鍵限制:不能跟確切的過去時間一起用。"I have visited Japan in 2019." 是錯的,因為 in 2019 是一個時間點,不是累積區間。
現在完成進行式:連續積分
$$S + \text{have/has} + \text{been} + V\text{-}ing + O$$
$$\int_{t_{\text{start}}}^{t_{\text{now}}} \text{activity}(t) \, dt$$
I have been studying for three hours.
不是在某個時間點做了「學習」,而是從三小時前到現在持續不斷地學習。對比一下就清楚了:
- "I have read the book"($\sum$,結果導向)
- "I have been reading the book"($\int$,過程導向)
被動語態:方程式反轉
$$\text{主動:} S + V + O$$ $$\text{被動:} O + \text{be} + V\text{-}pp + \text{by } S$$
$$f(x) = y \quad \Leftrightarrow \quad f^{-1}(y) = x$$
不是所有函數都可逆,同理:只有及物動詞(有受詞)才能變被動。"He sleeps." 不能變被動。
條件句:邏輯蘊含
第一條件句(真實): $$P \Rightarrow Q$$
If it rains, I will stay home.
第二條件句(假設現在): $$\neg P \Rightarrow Q_{\text{hypothetical}}$$
If I were rich, I would travel the world.
第三條件句(假設過去): $$\neg P_{\text{past}} \Rightarrow Q_{\text{past hypothetical}}$$
If I had studied harder, I would have passed the exam.
動詞的「時態後退」用來標記跟現實的距離。距離現在越遠,動詞就退得越遠。
| 條件 | 與現實距離 | 動詞變化 |
|---|---|---|
| 第一條件 | 近 | 現在式 + will |
| 第二條件 | 中 | 過去式 + would |
| 第三條件 | 遠 | 過去完成式 + would have |
長句子是公式套公式
真正的句子常常是好幾層公式疊起來,像樹狀結構:
The students who have been studying for the exam will have finished by tomorrow.
拆開來看,它其實是兩個子句疊在一起:
- 主幹(未來完成式):$S + \text{will have} + V\text{-}pp$
- 修飾主詞的關係子句(現在完成進行式):$\text{who} + \text{have been} + V\text{-}ing$
合在一起:
$$[\underbrace{S_{\text{rel}}}_{\text{who have been studying...}}] + \underbrace{\text{will have}}_{\text{future perfect}} + \underbrace{V\text{-}pp}_{\text{finished}} + \underbrace{\text{by tomorrow}}_{\text{時間界}}$$
用樹狀畫出來:
S = The students
|
+---------+---------+
| |
[who have been will have finished
studying for by tomorrow
the exam]
|
關係子句(修飾 S)
學會這樣拆,看到長句就不會慌。先找主幹(誰做了什麼),再看修飾語(誰的、用什麼、什麼時候),一層一層往下拆,最後再合回去念一遍。
時態一覽:3 × 4 矩陣
把時態排成一張「時間 × 體(aspect)」的表:
| 簡單(Simple) | 進行(Continuous) | 完成(Perfect) | 完成進行(Perfect Continuous) | |
|---|---|---|---|---|
| 過去 | $V\text{-}ed$ I ate. |
was/were + $V\text{-}ing$ I was eating. |
had + $V\text{-}pp$ I had eaten. |
had been + $V\text{-}ing$ I had been eating. |
| 現在 | $V(s/es)$ I eat. |
am/is/are + $V\text{-}ing$ I am eating. |
have/has + $V\text{-}pp$ I have eaten. |
have/has been + $V\text{-}ing$ I have been eating. |
| 未來 | will + $V$ I will eat. |
will be + $V\text{-}ing$ I will be eating. |
will have + $V\text{-}pp$ I will have eaten. |
will have been + $V\text{-}ing$ I will have been eating. |
三個觀察:
- 橫的是時間,縱的是體的「深度」。左邊是表層(單點動作),越往右越深(累積、持續)。
- 常被說成 16 格,其實核心組合是 $3 \times 4 = 12$ 種。被動、情態那幾格另外算。
- 你不需要背 12 種。你只需要知道每個軸怎麼走:時間往過去退($\text{shift}_{\text{past}}$),體往完成加($\text{have} + V\text{-}pp$),體往進行加($\text{be} + V\text{-}ing$)。三個軸自由組合。
有人看到符號就頭暈
不是每個人對公式都有好感。假設有個三十多歲、做會計的學習者,第一次看到 $V(t)$ 的寫法就說「看到符號頭就暈」。聊下去才發現,他高中數學被當過,從此對任何「看起來像數學」的東西都過敏。英文文法本來跟數學無關,套上公式符號反而觸發了抗拒。
這是很真實的學習心理:曾經在某個領域受挫,那個領域的「外觀」就會自動讓你警覺。符號、公式、$f(x)$,對某些人是啟發,對另一些人是壓力。
遇到這種情況,我的做法是讓公式變得「不像公式」:
- 用白話寫註解。$V(t)$ 旁邊寫「動詞帶時間參數」,不要只放符號。
- 把符號換成中文位置。$S$ 就是「主詞那個空位」,$V$ 就是「動詞那個空位」。
- 先用填空題過渡。「我 ______(吃)蘋果。」寫對了,再改成公式。
- 接受跳過。看完這篇記住 SVO 就夠了,條件句的符號可以略過,重點是邏輯,不是符號本身。
公式只是工具。工具不對就換一個,能幫你記住的才是好工具。
程式語言早就這樣做了
我在 Amazon 做資料科學的時候,每天都在寫正則表達式(regex)。regex 的本質,就是用符號表達「模式」:
^\d{3}-\d{4}$ // 匹配 123-4567 這種電話號碼
這跟英文文法的公式是同一件事。\d 是「任意數字」這個抽象,量詞 {3} 是「出現三次」這個約束。整條 regex 就是一條公式,描述「什麼樣的字串算合法」。
再廣一點看:
- 邏輯學的 $\forall x \, P(x)$ 跟英文的 "All $x$ are $P$" 是同一件事。
- SQL 的
SELECT ... FROM ... WHERE ...跟英文的 SVO 結構幾乎一一對應。 - 程式語言的
if ... then ... else就是英文的第一/第二條件句。
語言學家其實早就知道這件事。喬姆斯基(Noam Chomsky)在 1950 年代就主張「語言是有限規則生成無限句子」,這跟數學的「有限公理生成無限定理」是同一個想法。只是大多數英文課本不從這個角度切入,所以學生看不到那條線。
寫過程式的人,文法公式會特別自然。沒寫過也沒關係,邏輯是通用的,符號只是載體。
練習:中文到公式,再回英文
第一部分:把句子變成公式,再從公式套出新的句子。
"She has read three books this month." → 公式:$S + \text{has} + V\text{-}pp + O$(現在完成式) → 套換:$S$ = He, $V$ = written, $O$ = two emails → "He has written two emails this month."
"If I had known, I would have called you." → 公式:$\neg P_{\text{past}} \Rightarrow Q_{\text{past}}$(第三條件句) → 套換:$P$ = she had arrived earlier, $Q$ = she would have caught the train → "If she had arrived earlier, she would have caught the train."
"They are playing soccer now." → 公式:$S + \text{are} + V\text{-}ing + O$(現在進行式) → 套換:$S$ = The children, $V$ = eating, $O$ = lunch → "The children are eating lunch now."
"You should study harder." → 公式:$S + \text{modal} + V_{\text{原形}}$(情態) → 套換:$S$ = We, modal = must, $V$ = leave → "We must leave."
"The cake was eaten by Tom." → 公式:$O + \text{was} + V\text{-}pp + \text{by } S$(被動) → 套換:$S$ = Maria, $V$ = painted, $O$ = the wall → "The wall was painted by Maria."
第二部分:中文先寫公式,再翻英文。
中文:「她昨天已經完成作業了。」 → 公式提示:$S + V\text{-}ed + O$(過去簡單式,已經=強調完成) → 英文:She finished her homework yesterday.
中文:「我們正在等公車。」 → 公式提示:$S + \text{are} + V\text{-}ing + O$ → 英文:We are waiting for the bus.
中文:「如果你早點出門,就不會遲到了。」 → 公式提示:$\neg P_{\text{past}} \Rightarrow Q_{\text{past}}$(第三條件句) → 英文:If you had left earlier, you would not have been late.
中文:「這個蛋糕是我媽媽烤的。」 → 公式提示:$O + \text{be} + V\text{-}pp + \text{by } S$(被動) → 英文:This cake was baked by my mother.
中文:「他應該已經到了吧。」 → 公式提示:$\text{modal} + \text{have} + V\text{-}pp$(對過去的推測) → 英文:He should have arrived already.
對答案的時候注意第 3 題和第 5 題。兩題表面都是「過去的假設」,公式卻不同:第 3 題是條件句(兩個子句),第 5 題是情態推測(單句內部)。混用的話意思會跑掉。
挑你最近寫錯的一句英文,只做兩件事:先寫出它應該套哪一條公式(例如 $S + \text{has} + V\text{-}pp + O$),再把公式裡的主詞、動詞、受詞換成新的字,造出兩個新句子。
三句以內就好。做完之後你大概會發現,你記住的不是那一個句子,而是那條規則的形狀。
如果卡住的是「這句到底屬於哪條公式」,把句子貼給我,我們一起拆。