如何在Haskell中通过递归(树)求值传递参数
我正在编写一个函数,它接受一个复合交互,并通过查找原语值递归地执行它。它基本上是一种树(我想)。但是,它需要跟踪在执行此操作时检查的最后两个基本值。在非函数式语言中,我可以只使用全局变量,但我不确定如何在Haskell中管理它 也许我可以通过一个实验列表,让它返回(Inter,experience),然后把它添加到下面标记的地方?为了不搞砸(Composite pre(acture post)),我会在前一行中得到调用,并且只使用Inter值。。。太好了,把它打出来我可能发现了一些复杂的东西。然而,如果有更优雅的方法来处理这个问题,我会很感激你的指点如何在Haskell中通过递归(树)求值传递参数,haskell,recursion,Haskell,Recursion,我正在编写一个函数,它接受一个复合交互,并通过查找原语值递归地执行它。它基本上是一种树(我想)。但是,它需要跟踪在执行此操作时检查的最后两个基本值。在非函数式语言中,我可以只使用全局变量,但我不确定如何在Haskell中管理它 也许我可以通过一个实验列表,让它返回(Inter,experience),然后把它添加到下面标记的地方?为了不搞砸(Composite pre(acture post)),我会在前一行中得到调用,并且只使用Inter值。。。太好了,把它打出来我可能发现了一些复杂的东西。然
data Inter = None | Primitive Experiment Result | Composite Inter Inter deriving (Show, Read, Eq, Ord)
enact :: Inter -> Inter
enact (Composite pre post) =
let enacted = enact pre
-- add to eHist here, pass it on. Reconstruct it after you finish?
in if enacted /= pre
then enacted
else (Composite pre (enact post))
enact (Primitive e _) = (Primitive e (getResult10 e))
enact None = None
-- Environment040
getResult40 :: [Experiment] -> Experiment -> Result
getResult40 (pre:pen:_) cur
| pen /= cur && pre == cur = R2
| otherwise = R1
我看不到代码的其余部分,因此无法编写其余部分。下面是如何在
执行
计算树的分支时传递“全局状态”的想法:
data Inter e r = None | Primitive e r
| Composite (Inter e r) (Inter e r)
deriving (Show, Read, Eq, Ord)
enact :: (Eq e, Eq r) => Inter e r -> State a (Inter e r)
enact (Composite pre post) = do
enacted <- enact pre
x <- get -- and then you can use x, if enact depends on the last
-- two Primitives seen
if enacted /= pre
then return enacted
else do
post' <- enact post
return $ Composite pre post'
enact (Primitive e r) = do
x <- get
put $ modify x somehow -- you wanted to keep track of
-- the last two Primitives
return $ Primitive e r
enact None = return None
data Inter e r=None |原语e r
|复合材料(内部e r)(内部e r)
派生(显示、读取、等式、Ord)
颁布::(Eq e,Eq r)=>Inter e r->State a(Inter e r)
颁布(综合前置后置)=执行
您应该包括所有必要的import
语句。import Control.Monad.State非常感谢!这正是我想知道的。多亏了你,学会在实践中使用状态并没有那么困难,它就像一个符咒。(e和r很好。总是想知道如何衡量描述性和简明的名称。不过我也应该包括这些。对不起。)