我对Haskell和一般的函数式编程都很陌生.我的问题非常基本.Pattern Matching和Guards有什么区别?
使用模式匹配的功能
check :: [a] -> String
check [] = "Empty"
check (x:xs) = "Contains Elements"
Run Code Online (Sandbox Code Playgroud)
使用警卫的功能
check_ :: [a] -> String
check_ lst
| length lst < 1 = "Empty"
| otherwise = "Contains elements"
Run Code Online (Sandbox Code Playgroud)
对我来说,模式匹配和防护看起来基本相同.两者都评估条件,如果为true则将执行挂钩的表达式.我的理解是正确的吗?
在这个例子中,我可以使用模式匹配或防护来获得相同的结果.但是有些东西告诉我,我错过了一些重要的事情.我们可以一直替换另一个吗?
有人可以提供一些例子,其中模式匹配比警卫更受欢迎,反之亦然吗?
在lisp中,符号可以同时绑定到值和函数.例如,
符号f绑定到一个函数
(defun f(x)
(* 2 x))
Run Code Online (Sandbox Code Playgroud)
符号f绑定到一个值
(setq f 10)
Run Code Online (Sandbox Code Playgroud)
所以我写这样的东西:
(f f)
Run Code Online (Sandbox Code Playgroud)
=> 20
这样的功能有什么好处?