【发布时间】:2016-01-05 12:39:18
【问题描述】:
如果我说let 5 = 10,为什么5 + 1 返回6 而不是11?
【问题讨论】:
-
立即回答将是“因为您无法重新定义
5是什么”。然而,我对写let 5 = 10竟然有可能感到非常惊讶! -
你能做的是
overload+:let 1+1=3 in 1+1;) -
顺便说一句:我认为
let 5 = 10中的5仍然是一种模式(只是一个永远不会匹配的模式),因此它不会绑定任何东西(如let (x,5) = (6,6)) -
@Carsten 确实——这就是Chapter 4 of the Report 所说的,假设我解析正确。
-
Prelude> :set -XBangPatterns然后Prelude> let !5 = 10产量*** Exception: <interactive>:9:5-11: Non-exhaustive patterns in pattern binding。懒惰隐藏了失败的模式匹配,让你的误解持续存在。
标签: haskell pattern-matching variable-assignment assignment-operator let