【发布时间】:2018-06-09 03:45:18
【问题描述】:
我们的一个朋友正在教我们用 Haskell 进行函数式编程的基础知识,他开始写我见过的最稀有的东西:
他从不那么令人惊奇但很酷的东西开始:
(x,y) = (10,20)
(z:zs) = 0 : [1..]
并在前奏曲中展示:
prelude> x
10
prelude> z
0
prelude> takeN 3 zs
[1,2,3]
到目前为止,一切都很好......我不知道你可以这样绑定值
(x,y) = (10,20)
(z:zs) = 0 : [1..]
True = False -- HERE
什么!?班上的每个人都想,好吧,出了点问题,但连编译好的代码都没有,然后就运行了:
prelude> x
10
prelude> 4
4
prelude> True
True
(我阅读了What does `let 5 = 10` do? Is it not an assignment operation? 的问题,我在这里没有使用任何 let,在我的示例中,我将代码写入文件并执行它,所以我的问题还没有得到回答,这些答案都没有用对我来说。)
【问题讨论】:
-
如果您重新提出以前因重复而关闭的问题,请突出显示差异。
-
到底是什么问题
-
在我们的例子中,
True = False是一个无可辩驳的模式,并且由于没有任何变量被它限制,所以没有任何东西强制True模式和值False之间的匹配。 -
@DamianLattenero 我会在这里回复你的 Meta 问题,以避免 Meta 影响。我认为您的问题具有重复的价值,不应删除。我猜重新开放投票引起了额外的关注,导致删除投票。幸运的是,在这种情况下有一个简单的出路:放弃另一个问题,转而支持这个问题——它本质上是相同的,针对相同的目标关闭,甚至有有用的补充答案。作为奖励,这个问题不能通过正常方式删除,因为我将它用作其他地方的重复目标。
-
@DamianLattenero [2/2] Meta 效应是当帖子获得大量额外选票时,因为它正在 Meta 问题中进行讨论。我怀疑 Meta 人群会发现第二个问题的存在存在问题,可能会导致投票失败和/或讨论脱轨。
标签: haskell binding pattern-matching