Haskell使用map调用具有多个参数的函数

戴西

假设我们有以下表示二进制树的代码,其中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将该函数映射Ints列表上

decode t xs = let y = map (decodeInt t) xs
              in ...

您仍然必须弄清楚如何转换为期望返回yStringdecode

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

调用具有多个参数值的模板函数

调用具有多个数组参数的函数

使用AJAX调用具有多个参数的CFC

使用反射调用具有默认参数值的函数

使用具有多个结果的函数作为参数

从修改默认值的函数调用具有不同默认参数的多个函数

如何使用具有参数化返回类型的函数参数调用函数

调用具有多个参数的函数的更简单方法?

如何从Java调用具有多个输入和输出参数的postgresql函数?

根据条件语句调用具有多个参数的函数

从F#调用具有多个参数的C#函数

从gridview超链接调用具有多个参数的Javascript函数

不能使用参数名称调用具有单个位置参数的 Cythonized 函数

如何调用具有多个参数的视图

调用具有多个参数的特征文件

通过PerformSelector iOS调用具有多个参数的方法

如何调用具有多个参数的HTTP POST请求?

如何调用具有多个参数的过程?

调用具有不同数量参数的函数

从JavaScript中的对象调用具有正确参数的函数

在Python中调用具有参考参数的.Net函数

调用具有较少参数的C函数?

在 Sinon 中假调用具有特定参数的函数

打字稿:调用具有“this”参数的静态函数

如何调用具有不同类作为参数的函数

嵌套 lapply 以允许调用具有多个输入的函数

是否可以使用JSFuck约定调用具有2个或更多参数的函数?

使用类属性调用具有非类型模板参数的模板函数

如何在Python中不使用括号的情况下调用具有参数的函数