四則運算

小題大作的國小數學課

記憶之中,國小的時候,曾經為了四則運算而苦惱:「為什麼要先乘除後加減?」

如果是三十年後的我,被國小三年級的學生問了「為什麼要先乘除後加減?」「為什麼要這樣子規定?」

我想,我大概會這樣子回答:

像 1 + 2 * 3 - 4 這樣子的表示法,如果我們用 Lisp 語言的 s-expression 來表示的話,可以寫成
(- (+ 1 (* 2 3)) 4)

在這種表示法之下,就算移除了括號,變成了『前序表示法』
- + 1 *2 3 4
也可以表現唯一的表示法運算順序,不會有其它的可能性。

畫成圖的話,長成如下:

換言之,如果我們使用 Lisp 語言的 s-expression 來表現數學的算式的話,就不需要定義任何的『運算子優先序』,同時也不存在所謂的「先乘除後加減」這類的規則。另一方面,如果我們還是堅持要使用,感覺相對自然的『中序表示法』,那要嘛就要使用括號,要嘛就是要定義運算子的結合優先順序,才能得到唯一的表示法運算順序。

接著,如果學生反應良好,就可以順便接著教「樹狀走訪直譯器」(Tree walk interpreter),從數學課再多跨一步,進入電腦科學課。(笑~)

Laurence Chen

IT 顧問、講者、作家。喜歡快速迭代 (fast iteration) 與提高產出。 著作:「從錯誤到創新」 https://leanpub.com/errors_to_innovation/ 網站:https://replware.dev/