【发布时间】:2014-01-05 12:54:40
【问题描述】:
为什么不允许同名的参数在同一个方程中出现多次? 例子:
f a a = show a
d && d = d
_ && _ = False
从技术上讲,形式参数(报告称这些变量)也是模式——只是它们永远不会匹配一个值。作为成功匹配的“副作用”,形式参数绑定到它正在匹配的值。出于这个原因,任何一个方程中的模式都不允许出现多次相同的形式参数(一种称为线性的属性 §3.17、§3.3、§4.4.3)。
【问题讨论】:
-
它的语义是什么?例如,如果您像
f 1 2一样调用f,结果应该是什么? -
@PedroRodrigues-我自己也想要这个很多次了!它将与“f x y | x == y = ....”相同(如果 x /= y,它将回退到下一个模式)。熟悉语言规范流程的人可以告诉我们为什么不允许这样做!是有原因的,还是只是从未考虑过?
-
WinGHCi:
Prelude> let _ && _ = False=>(0.00 secs, 0 bytes)=>Prelude> 5 && 6=>False -
@jamshidh 对于没有
Eq实例的类型意味着什么?甚至对于两个不同类型的参数? -
@fjh- 如果
x或y没有Eq实例,或者它们是不同的类型,则它的含义与f x y | x == y = ....的含义完全相同-编译器错误。
标签: variables haskell arguments naming-conventions