将元组的元素作为 Haskell 中的参数提供给函数? [英] Feed elements of a tuple to a function as arguments in Haskell?
问题描述
在我的 Haskell 程序中,我想使用 printf 来格式化元组列表.我可以将 printf 映射到一个列表上,这样一次打印一个值:
In my Haskell program, I want to use printf to format a list of tuples. I can map printf over a list to print out the values one at a time like this:
mapM_ (printf "Value: %d
") [1,2,3,4]
Value: 1
Value: 2
Value: 3
Value: 4
我希望能够做这样的事情:
I want to be able to do something like this:
mapM_ (printf "Values: %d %d
") [(1,100),(2,350),(3,600),(4,200)]
Values: 1 100
Values: 2 350
Values: 3 600
Values: 4 200
但是这将一个元组传递给 printf,而不是两个单独的值.如何将元组转换为 printf 的两个参数?
But this passes a tuple to printf, not two separate values. How can I turn the tuple into two arguments for printf?
推荐答案
函数 uncurry
将两个参数(柯里化)的函数转换为成对函数.这是它的类型签名:
Function uncurry
converts a two-argument (curried) function into a function on pairs. Here's its type signature:
uncurry :: (a -> b -> c) -> (a, b) -> c
你需要在printf
上使用它,像这样:
You need to use it on printf
, like this:
mapM_ (uncurry $ printf "Values: %d %d
") [(1,100),(2,350),(3,600),(4,200)]
另一种解决方案是使用模式匹配来解构元组,如下所示:
Another solution is to use pattern matching to deconstruct the tuple, like this:
mapM_ ((a,b) -> printf "Values: %d %d
" a b) [(1,100),(2,350),(3,600),(4,200)]
这篇关于将元组的元素作为 Haskell 中的参数提供给函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!