Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell Data.Tree.unfoldTree对同一输入进行多次计算_Haskell_Tree_Lazy Evaluation - Fatal编程技术网

Haskell Data.Tree.unfoldTree对同一输入进行多次计算

Haskell Data.Tree.unfoldTree对同一输入进行多次计算,haskell,tree,lazy-evaluation,Haskell,Tree,Lazy Evaluation,我必须生成一棵树,它的分支代表各种选择序列。我有三行(前面、中间和后面)和一组可以输入每行的项目。树中的每个节点表示项目的输入顺序。我正在使用Data.Tree.unfoldTree如下所示: import Data.Tree as Tree import Data.Seq as Seq data RowType = Front | Middle | Back data ChoiceTreeBuildLabel = Label (Seq.Seq RowType) Int Int Int ch

我必须生成一棵树,它的分支代表各种选择序列。我有三行(前面、中间和后面)和一组可以输入每行的项目。树中的每个节点表示项目的输入顺序。我正在使用
Data.Tree.unfoldTree
如下所示:

import Data.Tree as Tree
import Data.Seq as Seq

data RowType = Front | Middle | Back
data ChoiceTreeBuildLabel = Label (Seq.Seq RowType) Int Int Int

choiceTreeBuilder :: ChoiceTreeBuildLabel -> 
                     (Seq.Seq RowType, [ChoiceTreeBuildLabel])
choiceTreeBuilder (Label rt f m b) = (rt, concat [ff,mf,bf])
    where
        ff = if f == 0 then [] else [Label (Front <| rt) (f-1) m b]
        mf = if m == 0 then [] else [Label (Middle <| rt) f (m-1) b]
        bf = if b == 0 then [] else [Label (Back <| rt) f m (b-1)]

choiceTree f m b = Tree.unfoldTree choiceTreeBuilder (Label Seq.empty f m b)
导入数据。树作为树
导入数据。Seq为Seq
数据行类型=前|中|后
数据选择TreeBuildLabel=标签(Seq.Seq行类型)Int
choiceTreeBuilder::ChoiceTreeBuilderLabel->
(Seq.Seq行类型,[ChoiceTreeBuildLabel])
choiceTreeBuilder(标签rt f m b)=(rt,concat[ff,mf,bf])
哪里
ff=如果f==0,那么[]else[Label(FrontHaskell通常不记忆函数应用程序!否则,想象一下运行时将使用多少内存作为任何被记忆的应用程序。更不用说,如果您没有提供适当的内存概念,它怎么会“知道”您正在使用“相同”值调用呢“相同”你自己

您可以手动或使用适当的帮助程序包“纯”记忆函数

可表示的Trie库()提供了一个更复杂但类似的概念,这里有一个相关的问题: