将元组的元素作为 Haskell 中的参数提供给函数? [英] Feed elements of a tuple to a function as arguments in Haskell?

查看:21
本文介绍了将元组的元素作为 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆