相关疑难解决方法(0)

由于"折叠"不足以写一个带缩进的树漂亮的打印机,那么高阶组合器是什么?

例如,给出以下树数据类型:

data Tree a = Node [Tree a] | Leaf a deriving Show
type Sexp = Tree String
Run Code Online (Sandbox Code Playgroud)

如何使用高阶组合器表达"漂亮"功能,该组合打印出适当缩进的树?例如:

sexp = 
    Node [
        Leaf "aaa", 
        Leaf "bbb",
        Node [
            Leaf "ccc",
            Leaf "ddd",
            Node [
                Leaf "eee",
                Leaf "fff"],
            Leaf "ggg",
            Leaf "hhh"],
        Leaf "jjj",
        Leaf "kkk"]
pretty = ????
main = print $ pretty sexp
Run Code Online (Sandbox Code Playgroud)

我希望该程序的结果是:

(aaa 
   bbb 
   (ccc 
       ddd 
       (eee 
           fff) 
       ggg 
       hhh) 
   jjj 
   kkk) 
Run Code Online (Sandbox Code Playgroud)

这是一个不完整的解决方案,使用"fold"作为组合器,不实现缩进:

fold f g (Node children) = f (map (fold f g) children) …
Run Code Online (Sandbox Code Playgroud)

recursion haskell combinators fold

15
推荐指数
1
解决办法
561
查看次数

标签 统计

combinators ×1

fold ×1

haskell ×1

recursion ×1