相关疑难解决方法(0)

意外的模式匹配行为

这是我的代码的简化版本:

data Exp = Var String

test :: Exp -> String -> Bool
test e vIn = case e of
                  Var vIn -> True
                  _       -> False
Run Code Online (Sandbox Code Playgroud)

当我运行这个:

test (Var "X") "Y"
Run Code Online (Sandbox Code Playgroud)

我得到True,这很奇怪,因为它需要匹配(Var vIn)和(Var s),s~ = vIn.

任何人都可以解释发生了什么,并建议一种方法来解决它?

haskell

4
推荐指数
1
解决办法
188
查看次数

F#匹配两个值

我对F#很新,我希望将两个值与(match ... with ...)语法进行比较

当我尝试比较两个这样的值时出现问题:

let value1 = 19
let isValue1 y =
    match y with
    | value1 -> y + 1
    | _ -> y
Run Code Online (Sandbox Code Playgroud)

我得到一个警告,即永远不会达到代码的"| _ - > y"部分.为什么是这样?

我知道我可以执行以下操作以使函数按照我希望的方式工作:

let value1 = 19
let isValue1 y =
    match y with
    | _ when y = value1 -> true
    | _ -> false
Run Code Online (Sandbox Code Playgroud)

这也有效

let value1 = 19
let isValue1 y =
    match y with
    | 19 -> true
    | _ -> false
Run Code Online (Sandbox Code Playgroud)

我只是好奇为什么我不能这样做,以及匹配实际上是如何工作的.

f# pattern-matching

3
推荐指数
2
解决办法
828
查看次数

标签 统计

f# ×1

haskell ×1

pattern-matching ×1