gpt4 book ai didi

haskell - 声明 foo 中的模式解析错误 (5+5 :x:xs) = x

转载 作者:行者123 更新时间:2023-12-02 17:06:00 26 4
gpt4 key购买 nike

如果我将 5+5 替换为 10,代码将按预期工作。这里有什么问题?我可以在模式内使用 + 运算符吗?它被认为是 n+k 模式吗?我知道这些在 Haskell 2010 上是不允许的,所以这可能是问题所在。

谢谢。

最佳答案

是的,确实如此。一般来说,Haskell 中的有效模式应仅包含您绑定(bind)的构造函数、文字和变量,而不仅仅是任何函数。 (Haskell/Pattern matching)

(+) 是一个函数,因此包含它的模式根本不应该有效。所谓的“n+k 模式”之所以实际上是一个东西,是因为它是作为语法糖引入的(参见Wikipedia's entry on Haskell 2010)。除此之外,(5+5:x:xs) 作为模式应该与 [x, y, z]++ xs 一样无效。

给我自己的两分钱,这可能是不允许它的另一个原因,即使两个文字是 (+) 的操作数。如果 5+5 模式要通过编译器,Haskell 允许您执行此操作:

foo x = let 5 + 5 = 11 in (\(5+5:xs) -> x ++ xs)

现在在编译时就清楚 5 + 5 = 10 了吗?

关于haskell - 声明 foo 中的模式解析错误 (5+5 :x:xs) = x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50323387/

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