【发布时间】:2016-11-07 01:10:20
【问题描述】:
以下代码序列在输入 | 上生成解析错误。
如果输入是叶节点,则使用值调用 leafFunc
如果输入是一个树节点,那么用左子树、值、右子树调用 TreeFunc
data Tree t = Leaf t
| Node (Tree t) t (Tree t)
foldTree :: (t1 -> t -> t1 -> t1) -> (t -> t1) -> Tree t -> t1
foldTree treeFn leafFn tree= | foldTree (Leaf v) = leafFn(v)
| foldTree (Node left v right) = treeFn(left v right)
Input : foldTree (\t1 t t2->t1 + 5*t + t2) (\x->x+9) (Leaf 5)
Expected Output : 14
Input : foldTree (\t1 t t2->t1 + 3*t + t2) (\x->x+5) (Tree (Leaf 3) 2 (Leaf 4))
Expected Output : 23
我是haskell的新手。
【问题讨论】:
-
解析错误结果表明您的保护语句格式不正确。您不应该在
|之前放置等号。在那之后你还有一些其他的事情需要解决,包括在守卫中应用具有正确数量参数的 foldTree。 -
我想在 "=" 之后进行模式匹配。我怎样才能做到这一点 ? :) TIA
-
您混淆了函数/保护语法。在守卫的右侧,您包括谓词(评估为
True或False的函数)和相应的值分配。如果您想对不同的情况(叶与节点)进行模式匹配,您可以使用 case 语句或通过手动将多个情况与函数声明进行匹配来实现。我建议您阅读以下内容:learnyouahaskell.com/syntax-in-functions
标签: haskell functional-programming