模式匹配是語法糖嗎?

初學函數式編程,想知道模式匹配是代替if-else的語法糖嗎


個人認為不是吧。。雖然if-else可以用模式匹配實現,但模式匹配一般是用來判斷一個值的結構,並根據結構創造適當的binding。把Constant Pattern加進來,可以說是模式匹配自身的語法糖,隱式地有了if語義。

另外實現的時候,帶模式匹配的語言可以經過desugaring轉成沒有模式匹配的語言,如果不考慮效率,if else/let/letrec之類的構造都可以消掉,最後變成untyped lambda calculus(如果不用church encoding,有primitive constant/operator的話是ISWIM)那你說if else/let/letrec之類的這麼基本的東西是語法糖,那就是玩文字遊戲耍流氓了。


看你怎麼理解什麼是語法糖了。假如你認為C語言是彙編的語法糖,面向對象是語法糖,匿名函數是語法糖,那麼自然模式匹配也是語法糖了。理論上有順序,判斷和跳轉就能表達任意邏輯了,其實彙編/機器碼居然有那麼多指令也是語法糖了(指令糖?),媽蛋。


haskell 函數定義裡面的模式匹配是 case表達式 的 語法糖


是個好語法糖。不顯多餘、提倡使用。

但終究是語法糖而不是根本性的原理,花太多時間鑽研細節就不好了。


推薦閱讀:

如何評價scalaz這個庫?
scala 和 haskell哪個更適合 新人去學習?
F# 是比 Scala 更好的語言嗎?
如何看待reactive web框架Binding.scala ?
現在有沒有公司使用 Scala 進行 Android 開發,如果有那麼使用哪些工具呢?

TAG:編程語言 | Scala | 函數式編程 |