元组和函数组合
有没有更好的方法用函数组合来表达 (\(a, b) -> a < b)
?我觉得我错过了一些东西,尝试咖喱只会让我更加困惑。
Is there a better way to express (\(a, b) -> a < b)
with function composition? I feel like I'm missing something and experimenting with curry
only confused me more.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
curry
在这里使用是错误的;它将对元组进行操作的函数转换为柯里化函数。您想要相反的内容,即uncurry
:在本例中,它是
uncurry (<)
。(在元组上编写函数时有用的组合器的另一个有用来源是
Control.Arrow
; 由于(->)
是Arrow
的实例,因此您可以读取ab c
作为b -> c
。)curry
is the wrong thing to use here; it turns a function operating on tuples into a curried function. You want the opposite, which isuncurry
:In this case, it's
uncurry (<)
.(Another useful source for combinators useful in writing functions on tuples is
Control.Arrow
; since(->)
is an instance ofArrow
, you can reada b c
asb -> c
.)在 Haskell 中,查看类型是了解函数功能的最佳方式:
curry
:pair → curried 函数的函数(它柯里化函数)。uncurry
:柯里化函数→pair 函数。uncurry
有几个有趣的应用,尝试将不同的参数传递给下面的函数,看看它们的作用:Looking at the types is the best way in Haskell to get the first idea, what any function does:
curry
: function of pair → curried function (it curries a function).uncurry
: curried function → function of pair.There are several interesting applications of
uncurry
, try to pass different arguments to functions below and see what they do: