dav*_*gan 20 printf haskell functional-programming currying
在我的Haskell程序中,我想使用printf来格式化元组列表.我可以将printf映射到列表上,一次打印一个值,如下所示:
mapM_ (printf "Value: %d\n") [1,2,3,4]
Value: 1
Value: 2
Value: 3
Value: 4
Run Code Online (Sandbox Code Playgroud)
我希望能够做到这样的事情:
mapM_ (printf "Values: %d %d\n") [(1,100),(2,350),(3,600),(4,200)]
Values: 1 100
Values: 2 350
Values: 3 600
Values: 4 200
Run Code Online (Sandbox Code Playgroud)
但是这会将一个元组传递给printf,而不是两个单独的值.如何将元组转换为printf的两个参数?
Mii*_*kka 42
函数uncurry将双参数(curried)函数转换为对上的函数.这是它的类型签名:
uncurry :: (a -> b -> c) -> (a, b) -> c
Run Code Online (Sandbox Code Playgroud)
您需要使用它printf,如下所示:
mapM_ (uncurry $ printf "Values: %d %d\n") [(1,100),(2,350),(3,600),(4,200)]
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是使用模式匹配来解构元组,如下所示:
mapM_ (\(a,b) -> printf "Values: %d %d\n" a b) [(1,100),(2,350),(3,600),(4,200)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6654 次 |
| 最近记录: |