Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 奇怪的模式匹配:正确吗?_Haskell_Pattern Matching - Fatal编程技术网

Haskell 奇怪的模式匹配:正确吗?

Haskell 奇怪的模式匹配:正确吗?,haskell,pattern-matching,Haskell,Pattern Matching,为什么这个功能总是成功?它总是返回带有任何值和任何类型的True。这是正确的行为吗 f a b = case a of b -> True; _ -> False 案例定义中的b不是f定义头部的bin。您创建了一个新的局部作用域变量。因此,您的代码相当于: f a b = case a of c -> True _ -> False f a b = case a of _ -> True 除了被接受的完美答案,我的两分钱: 这: 这是:

为什么这个功能总是成功?它总是返回带有任何值和任何类型的
True
。这是正确的行为吗

f a b = case a of b -> True; _ -> False

案例定义中的
b
不是
f
定义头部的
b
in。您创建了一个新的局部作用域变量。因此,您的代码相当于:

f a b = case a of
    c -> True
    _ -> False
f a b = case a of
    _ -> True

除了被接受的完美答案,我的两分钱:

这:

这是:

f a b = case a of
                c -> True
                _ -> False --(B)
它们相当于:

f a b = case a of
    c -> True
    _ -> False
f a b = case a of
    _ -> True

所以,要小心,因为这是您创建的真实行为,一个接受两个参数并始终返回True的函数

此外:

(A)(B)如果使用了
-Woverlapping patterns
,则将显示此警告:

warning: [-Woverlapping-patterns]
    Pattern match is redundant
    In a case alternative: _ -> ...
  |
3 |               _ -> False
  |               ^^^^^^^^^^

b->True
中的
b
是一个局部作用域变量,在
f
定义级别中“隐藏”外部
b
。您使用的模式是
b
,与变量的模式匹配总是成功的。@WillemVanOnsem这个问题本质上不是关于?你不认为它真的应该这样标记吗?所以,如果你已经回答了这个问题,你觉得在这种情况下,你有时也可以重新给他们贴标签,怎么样?在我做了这样的重新标记编辑之后,我真的很不安地看到我的名字一直在标签上……故事的寓意:别忘了添加
-Wall
。OP:
这是正确的行为吗?
你期望的是什么行为?你应该在这个问题上分享你的假设:)像往常一样棒极了,但现在我可以加上我的两分钱:)
f _ b = True
warning: [-Woverlapping-patterns]
    Pattern match is redundant
    In a case alternative: _ -> ...
  |
3 |               _ -> False
  |               ^^^^^^^^^^