四則運算
小題大作的國小數學課
--
記憶之中,國小的時候,曾經為了四則運算而苦惱:「為什麼要先乘除後加減?」
如果是三十年後的我,被國小三年級的學生問了「為什麼要先乘除後加減?」「為什麼要這樣子規定?」
我想,我大概會這樣子回答:
像 1 + 2 * 3 - 4 這樣子的表示法,如果我們用 Lisp 語言的 s-expression 來表示的話,可以寫成
(- (+ 1 (* 2 3)) 4)在這種表示法之下,就算移除了括號,變成了『前序表示法』
- + 1 *2 3 4
也可以表現唯一的表示法運算順序,不會有其它的可能性。畫成圖的話,長成如下:
換言之,如果我們使用 Lisp 語言的 s-expression 來表現數學的算式的話,就不需要定義任何的『運算子優先序』,同時也不存在所謂的「先乘除後加減」這類的規則。另一方面,如果我們還是堅持要使用,感覺相對自然的『中序表示法』,那要嘛就要使用括號,要嘛就是要定義運算子的結合優先順序,才能得到唯一的表示法運算順序。
接著,如果學生反應良好,就可以順便接著教「樹狀走訪直譯器」(Tree walk interpreter),從數學課再多跨一步,進入電腦科學課。(笑~)