use*_*517 -1 recursion haskell functional-programming
plusOne :: [[(Int, Int, Int)]] -> [[(Int, Int, Int)]]
给出一个3元组列表.如果我想遍历列表并且对Int值进行+1,那么我该如何处理呢?我不确定这是否应该使用地图.
有人能指出我正确的方向吗?
拆分功能.这些清单很容易; 一个map每个.但是元组不会像Python那样遍历它们,所以它们需要解压缩来访问元素; 这可以通过通用编程实现,但使用模式匹配则更容易.元组可以容纳不同类型的字段,因此map无法访问所有字段.我们可以专门为三元组制作我们自己的地图模拟:
map3t :: (x -> y) -> (x, x, x) -> (y, y, y)
map3t f (a, b, c) = (f a, f b, f c)
Run Code Online (Sandbox Code Playgroud)
现在我们可以检查我们类型的每个级别并单独处理它:
op :: Int -> Int
op = (+1)
t3 :: (Int, Int, Int) -> (Int, Int, Int)
t3 = map3t op
lt3 :: [(Int, Int, Int)] -> [(Int, Int, Int)]
lt3 = map t3
llt3 :: [[(Int, Int, Int)]] -> [[(Int, Int, Int)]]
llt3 = map lt3
Run Code Online (Sandbox Code Playgroud)
这不是递归,尽管map可以使用递归(Data.List.mapis)来实现.每个函数都为内层调用不同的函数.
| 归档时间: |
|
| 查看次数: |
338 次 |
| 最近记录: |