首页 > 解决方案 > 将所有节点总结为具有泛型类型的树。(哈斯克尔)

问题描述

我一直在尝试编写一个代码来获取树中的所有整数并返回它们的总和。我正在尝试使用 type 来执行此操作a,它来自数据时间:

data Tree a = Nil | Value a (Tree a) (Tree a) deriving Show

我们想使用: tree = Value 2 (Value 2 (Value 2 Nil Nil) Nil) (Value 2 Nil Nil)

我的代码如下:

countTree :: (a -> a -> a) -> a -> Tree a -> a
countTree p k (Nil) = h
countTree p k (Value x y z) = x (+) (countTree p k y) (+) (countTree p k z) 

我想运行我的代码,countTree (+) 0 tree结果应该返回8。问题是当我运行我的代码时,它告诉我x有四个参数,但它的类型a为零,老实说我不明白为什么。我已经修改了我的代码部分,但一次都没有成功,我真的可以使用一些帮助。

标签: haskell

解决方案


x (+) (countTree p k y) (+) (countTree p k z) 

正在尝试将x其视为一个函数,并将所有的参数作为参数传递给它

(+) (countTree p k y) (+) (countTree p k z)

如果你想要“x + recur left + recur right”,你会想要这样的东西:

x + (countTree p k y) + (countTree p k z)

我很确定您实际上想要使用p,而不是+硬编码。使用前缀表示法,您必须将其重新排列为:

(p (p x (countTree p k y)) (countTree p k z))

或者,您可以p按照@bipll 的建议使用反引号内联调用:

x `p` (countTree p k y) `p` (countTree p k z)

附注,但我也很确定你想h成为k.


推荐阅读