gpt4 book ai didi

haskell - Haskell中的参数数量和无点

转载 作者:行者123 更新时间:2023-12-03 20:16:58 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Defining a function by equations with different number of arguments

(3 个回答)


5年前关闭。




使用多个模式匹配,不同数量的参数是不可能的,即使是无点!

foo True b = b + 2
foo _ = id

例如不起作用。但
foo True = (+2)
foo _ = id

做。有时我们只能在函数的一部分中使用无点,所以...

为什么? GHC太难了吗? :'(

最佳答案

Why? Is it too hard for GHC?



没有 . GHC 一点也不难。实际上,这是 Haskell 报告的错误。

见: Haskell Report 2010 > Declarations and Bindings > Function bindings

A function binding binds a variable to a function value. The general form of a function binding for variable x is:

x p11 … p1k match1

x pn1 … pnk matchn

[...blah blah...]

Translation: The general binding form for functions is semantically equivalent to the equation (i.e. simple pattern binding):

x = \ x1 … xk -> case (x1, …, xk) of

(p11, …, p1k) match1

(pn1, …, pnk) matchn
where the xi are new identifiers.



(强调我的)

虽然函数定义在语义上等同于 lambda & case 表达式,但它们不一定像 Mihai 所建议的那样编译。

问题是,Haskell 报告定义了函数声明,使得它们在等式左侧必须具有相同数量的输入。 k 的事实清楚地表明了这一点。在第 1 和第 n 个函数声明行上保持相同(并且暗示,中间的所有行)。这就是限制的原因; 与GHC的实现细节无关 .

tl;博士

The choice not to allow it is just a matter of style. – augustss

关于haskell - Haskell中的参数数量和无点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11487171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com