为什么Haskell使用->而不是=?

8
为什么 Haskell 使用“->”而不是“=”呢?这里举个例子,为什么下面的代码是错误的?
take m ys               = case (m,ys) of
                            (0,_)       =  []
                            (_,[])      =  []
                            (n,x:xs)    =  x : take (n-1) xs

或者

(\x = x * x)

嗯,对我来说,这看起来有点混乱。 - Lee Duhem
1个回答

21

写下不幸的话是很不好的

(0, _) = []

因为那不是真的。

按照罗伯特·里科德(Robert Recorde)的传统,我们只在意图左边等于右边时才尝试编写方程式。所以我们写成:

dup x = (x, x)

要使dup x等于(x, x),或者

dup = \ x -> (x, x)

dup成为将x映射为(x, x)的函数,但不是…
\ x = (x, x)

因为没有办法使x等于(x, x)

当我们允许"falling through"时,我们只是轻微地偏离传统,例如:

f 0 = 1
f n = 2 * f (n - 1)

但只是在第二行有一个无声的“否则”的意义上。

8
25年前,Haskell委员会就在这种情况下是否应该有一个非静默的“otherwise”进行了激烈的辩论。菲尔·沃德勒赞成加入“otherwise”,而其他人则反对。 - augustss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接