这是我的代码的简化版本:
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.
任何人都可以解释发生了什么,并建议一种方法来解决它?
我对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)
我只是好奇为什么我不能这样做,以及匹配实际上是如何工作的.