在哈斯克尔建立一系列部分函数的Monadic

时间:2017-07-29 14:21:16

标签: haskell lambda set combinations monads

考虑一组n个数字(例如4个数字{1, 2, 3, 4}),以及一组二进制{+, -, *, /}和一元运算符{ln, exp, sin}。使用每个数字一次组合这些,使用任何运算符,其中一个数字最多可应用于一元运算符一次。例如:1+2+3-4sin(1)*4 + log(2) + 3。现在,计算所有可能的表达式,显示结果超过0的所有表达式。

我们可以使用前缀操作将它们链接到Haskell中的无点样式函数:

(+) 1 . (+) 2 . (-) 3 $ 4
(+) 3 . (+) (log 2) . (*) 4 $ (sin 1)

是否存在functor / monad / applicative方法来获取所有可能的链,这些链将每个数字与所有可能的运算符组合在一起,而不重复数学上等效的表达式w.r.t.这些二元运算符的可交换属性,例如1+2=2+12*3=3*2

0 个答案:

没有答案