小编Chr*_*ris的帖子

遍历和过滤haskell中的树

我是Haskell的新手(仍在努力完全理解monads).我有一个问题,我有一个树状的结构

type Tree = [DataA]

data DataA =  DataA1 [DataB] 
            | DataA2 String 
            | DataA3 String [DataA]
               deriving Show

data DataB =  DataB1 [DataA] 
            | DataB2 String 
            | DataB3 String [DataB]
               deriving Show
Run Code Online (Sandbox Code Playgroud)

我想要做的是能够遍历这个并生成一个带过滤器的新树.例如,我可能想要将树中的所有DataB2更改为"foo".

我已经看到了树在同一数据部分中的示例,并且构造函数是相似的.

在python世界中,我只是遍历列表,匹配我需要的任何东西,并替换值.

在Haskell中我猜我需要能够复制我的树,但是你如何处理隐藏在构造函数和不同数据类型中的列表?

tree haskell traversal generic-programming

8
推荐指数
1
解决办法
2092
查看次数

Haskell parsec解析一串项

我有一个列表,我需要解析除了最后一个元素之外的所有元素需要由一个解析器解析,最后一个元素需要由另一个解析器解析.

a = "p1 p1b ... p2"
or
a = "p2"
Run Code Online (Sandbox Code Playgroud)

本来我试过

parser = do parse1 <- many parser1
            parse2 <- parser2
            return AParse parse1 parse2
Run Code Online (Sandbox Code Playgroud)

问题是parse1可以使用parse2输入.所以parse1总是占用整个列表,并且没有任何东西留下parse2.

有没有办法说将parse1应用到除字符串中最后一个元素之外的所有内容,然后应用parse2?

haskell parsec

8
推荐指数
1
解决办法
1288
查看次数

如何使用Scrap Your Boilerplate变换树?

我是Haskell的新手,所以我想弄清楚如何进行树遍历.

以下是我在几篇论文中看到的公司示例(略有变化)

data Company  = C [Dept]               deriving (Eq, Show, Typeable, Data)
data Dept     = D Name Manager [Unit]  deriving (Eq, Show, Typeable, Data)
data ThinkTank= TK Name [Unit]         deriving (Eq, Show, Typeable, Data)
data Unit     = PU Employee | DU Dept  deriving (Eq, Show, Typeable, Data)
data Employee = E Person Salary        deriving (Eq, Show, Typeable, Data)
data Person   = P Name Address         deriving (Eq, Show, Typeable, Data)
data Salary   = S Float                deriving (Eq, Show, Typeable, Data)
type …
Run Code Online (Sandbox Code Playgroud)

tree haskell traversal

7
推荐指数
2
解决办法
1351
查看次数

标签 统计

haskell ×3

traversal ×2

tree ×2

generic-programming ×1

parsec ×1