折叠二叉树时无法匹配预期类型
Couldn't match expected type when folding binary trees
data BB a = L | K (BB a) a (BB a) deriving (Show)
foldrpBB :: (a -> b -> b) -> b -> BB a -> b
foldrpBB f b L = b
foldrpBB f b (K l r a) = foldrpBB f (f r (foldrpBB f b a)) l
foldrprBB :: (a -> b -> b) -> b -> BB a -> b
foldrprBB f b L = b
foldrprBB f b (K a l r) = foldrprBB f (f l (foldrpBB f b r)) a
我正在尝试创建两个不同的折叠函数,它们将打印 post- 和给定二叉树的中缀表达式,例如 K (K L 2 L) 1 (K (K L 4 L) 3 L ) 与匿名函数结合使用时 (\x xs -> concat ["(", show x, xs, ")"]).
我收到一个错误,基本上告诉我我的函数需要一个字符串,但它应该需要一个函数和一个二叉树 (BB):
- 无法匹配预期的类型:[Char]
实际类型:BB a0 -> a0 -> BB a0 -> BB a0
- 可能的原因:
K' is applied to too few arguments In the second argument of
foldrpBB',即‘K’
在表达式中:
foldrpBB
(\ x xs -> concat ["(", show x, xs, ....]) K (K L 2 L) 1
(K (K L 4 L) 3 L)
我该如何解决这个问题?
你犯了两个不同的错误。首先,您在调用该函数时忘记了基本情况 b
参数。我假设您希望它是 ""
。其次,您需要在要折叠的结构中使用括号或 $
。您将从以下两个固定表达式中的任何一个得到 "(2(1(4(3))))"
:
foldrpBB (\x xs -> concat ["(", show x, xs, ")"]) "" $ K (K L 2 L) 1 (K (K L 4 L) 3 L)
foldrpBB (\x xs -> concat ["(", show x, xs, ")"]) "" (K (K L 2 L) 1 (K (K L 4 L) 3 L))
data BB a = L | K (BB a) a (BB a) deriving (Show)
foldrpBB :: (a -> b -> b) -> b -> BB a -> b
foldrpBB f b L = b
foldrpBB f b (K l r a) = foldrpBB f (f r (foldrpBB f b a)) l
foldrprBB :: (a -> b -> b) -> b -> BB a -> b
foldrprBB f b L = b
foldrprBB f b (K a l r) = foldrprBB f (f l (foldrpBB f b r)) a
我正在尝试创建两个不同的折叠函数,它们将打印 post- 和给定二叉树的中缀表达式,例如 K (K L 2 L) 1 (K (K L 4 L) 3 L ) 与匿名函数结合使用时 (\x xs -> concat ["(", show x, xs, ")"]).
我收到一个错误,基本上告诉我我的函数需要一个字符串,但它应该需要一个函数和一个二叉树 (BB):
- 无法匹配预期的类型:[Char]
实际类型:BB a0 -> a0 -> BB a0 -> BB a0
- 可能的原因:
K' is applied to too few arguments In the second argument of
foldrpBB',即‘K’ 在表达式中: foldrpBB (\ x xs -> concat ["(", show x, xs, ....]) K (K L 2 L) 1 (K (K L 4 L) 3 L)
- 可能的原因:
我该如何解决这个问题?
你犯了两个不同的错误。首先,您在调用该函数时忘记了基本情况 b
参数。我假设您希望它是 ""
。其次,您需要在要折叠的结构中使用括号或 $
。您将从以下两个固定表达式中的任何一个得到 "(2(1(4(3))))"
:
foldrpBB (\x xs -> concat ["(", show x, xs, ")"]) "" $ K (K L 2 L) 1 (K (K L 4 L) 3 L)
foldrpBB (\x xs -> concat ["(", show x, xs, ")"]) "" (K (K L 2 L) 1 (K (K L 4 L) 3 L))