haskell - 在 Haskell 中将元组的元素作为参数提供给函数?

标签 haskell functional-programming printf currying

在我的 Haskell 程序中,我想使用 printf 来格式化元组列表。我可以将 printf 映射到一个列表上,一次打印一个值,如下所示:

mapM_ (printf "Value: %d\n") [1,2,3,4]

Value: 1
Value: 2
Value: 3
Value: 4

我希望能够做这样的事情:

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

但这将一个元组传递给 printf,而不是两个单独的值。如何将元组转换为 printf 的两个参数?

最佳答案

函数 uncurry 将双参数(柯里化(Currying))函数转换为对函数。这是它的类型签名:

uncurry :: (a -> b -> c) -> (a, b) -> c

您需要在 printf 上使用它,如下所示:

mapM_ (uncurry $ printf "Values: %d %d\n") [(1,100),(2,350),(3,600),(4,200)]

另一种解决方案是使用模式匹配来解构元组,如下所示:

mapM_ (\(a,b) -> printf "Values: %d %d\n" a b) [(1,100),(2,350),(3,600),(4,200)]

关于haskell - 在 Haskell 中将元组的元素作为参数提供给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5117948/

相关文章:

Typescript 循环函数引用

java - 在java中使用printf与数组

c - 当尝试打印 double 时,printf 在 C 中打印奇怪的字符

c - sprintf 格式化 : fixed number of characters, 小数位数可变

validation - Haskell:检查字符串是否为有效数字

parsing - 为什么 Haskell 的 Prelude.read 不返回 Maybe ?

r - purrr pmap 函数参数

haskell - 返回类型丢失 IO

haskell - 类型类约束的存在量化

javascript - ramda js 使用reduce 连接值