小编Var*_*jan的帖子

Pattern Matching和Guards有什么区别?

我对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则将执行挂钩的表达式.我的理解是正确的吗?

在这个例子中,我可以使用模式匹配或防护来获得相同的结果.但是有些东西告诉我,我错过了一些重要的事情.我们可以一直替换另一个吗?

有人可以提供一些例子,其中模式匹配比警卫更受欢迎,反之亦然吗?

syntax haskell guard

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

符号同时绑定到值和函数的优点是什么?

在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

这样的功能有什么好处?

lisp namespaces

5
推荐指数
1
解决办法
213
查看次数

标签 统计

guard ×1

haskell ×1

lisp ×1

namespaces ×1

syntax ×1