gpt4 book ai didi

haskell - 避免显式传递查找表

转载 作者:行者123 更新时间:2023-12-04 09:04:25 24 4
gpt4 key购买 nike

在我非常简单的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com