作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我非常简单的 bool 表达式玩具程序中,我有以下评估函数:
eval' :: Expr -> M.Map Char Bool -> Bool
eval' (Const c) values = c
eval' (Var v) values = M.findWithDefault False v values
eval' (Not x) values = not (eval' x values)
eval' (And a b) values = eval' a values && eval' b values
eval' (Or a b) values = eval' a values || eval' b values
eval' (Xor a b) values = eval' a values /= eval' b values
values
表隐式?也许在 Monads 的帮助下?
最佳答案
单子(monad)可以工作,但我认为使用 Applicative
这里更干净:
eval' :: Expr -> M.Map Char Bool -> Bool
eval' (Const c) = pure c
eval' (Var v) = M.findWithDefault False v
eval' (Not x) = not <$> eval' x
eval' (And a b) = (&&) <$> eval' a <*> eval' b
eval' (Or a b) = (||) <$> eval' a <*> eval' b
eval' (Xor a b) = (/=) <$> eval' a <*> eval' b
((->) r)
例如,像
Reader
monad/applicative,但没有 newtype 包装器。
关于haskell - 避免显式传递查找表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7504012/
我是一名优秀的程序员,十分优秀!