我一直试图编写一个代码,该代码将一棵树中的所有整数都返回并求和。我正在尝试使用类型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
却为零,我真的不明白为什么。我已经修改了我的代码部分,但是一次都没有成功,我真的可以使用一些帮助。
答案 0 :(得分:3)
SELECT count(*) FROM(
SELECT item FROM s1
INTERSECT
SELECT item FROM s2
INTERSECT
SELECT item FROM s4
EXCEPT
SELECT item FROM s3);
试图将x (+) (countTree p k y) (+) (countTree p k z)
视为一个函数,并将
x
如果您想使用“ x +向左递归+向右递归”,则需要以下内容:
(+) (countTree p k y) (+) (countTree p k z)
我很确定,但是您实际上想使用x + (countTree p k y) + (countTree p k z)
,而不是p
硬编码。使用前缀表示法,您必须将其重新排列为:
+
或者,您可以按照@bipll的建议使用反引号将对(p (p x (countTree p k y)) (countTree p k z))
的调用内联:
p
旁注,但我也很确定您希望x `p` (countTree p k y) `p` (countTree p k z)
成为h
。