假设我们有以下表示二进制树的代码,其中decodeInt
在树中搜索整数:
import Text.Show.Functions
data BinTree a b = Leaf b | Node a (BinTree a b) (BinTree a b) deriving Show
example :: BinTree (Int -> Bool) Char
example = Node (\x -> x > 4) (Node (\x -> x * x == x) (Leaf 'g') (Node (\x -> x == 0)
(Leaf 'u') (Leaf 'l'))) (Node (\x -> x >= 7) (Leaf 'f') (Leaf 'i'))
countInnerNodes :: BinTree a b -> Int
countInnerNodes (Node a b c) = 1 + countInnerNodes b + countInnerNodes c
countInnerNodes (Leaf x) = 0
decodeInt :: BinTree (Int -> Bool) b -> Int -> b
decodeInt (Leaf b) p = b
decodeInt (Node x y z) p = if (x(p) == True) then decodeInt z p else decodeInt y p
decode :: BinTree (Int -> Bool) b -> [Int] -> String
decode x [] = "empty list"
decode x xs = ??????
调用解码时,如何使用map获得这样的结果?
decode Tree [1,2,3,4]
= [decodeInt Tree (1), decodeInt Tree (2),
decodeInt Tree (3), decodeInt Tree (4)]
/ edit:跟进我们也想创建一个如下的函数
mapTree (\x -> ’e’) example
mapTree应该像示例一样返回BinTree,唯一的区别是每个Leaf的Char已被替换为'e'。我该怎么做?我昨天开始了Haskell,所以我对函数式编程很陌生。
decodeInt :: BinTree (Int -> Bool) b -> Int -> b
,因此假定t :: BinTree (Int -> Bool) b
,然后decodeInt t :: Int -> b
。您将该函数映射到Int
s列表上。
decode t xs = let y = map (decodeInt t) xs
in ...
您仍然必须弄清楚如何转换为期望返回y
的String
值decode
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句