【发布时间】:2013-10-24 00:58:41
【问题描述】:
我一直在学习 uncurrying 和在 haskell 函数中应用 $,但我仍然在将 uncurried 函数转换为不那么神秘的东西时遇到问题。
给我的功能是
apple = map $ uncurry $ flip ($)
我意识到这需要一个元组列表并将元组中的相应函数应用于内部变量。所以我正在尝试将其重写为
apple ls = foldr function _ ls
where function (a,b) c = (uncurry b) (a,c)
我得到 _ 作为解析错误的错误,我不知道要使用哪个起点。我需要使这种多态性,并且我意识到这很可能不会使它变得不那么神秘。有任何想法吗?他们将不胜感激
【问题讨论】:
-
原始
apple的主要定义是基于map(这是有道理的,因为它需要一个列表并对列表的每个元素“做某事”来给你一个列表结果)。所以最直接的重新实现它的方法是使用map,而不是foldr。你可以使用foldr,因为foldr更通用,可以用来实现map。但在任何基于foldr的解决方案中,您基本上必须 包含map的重新实现,这会增加复杂性并且不会帮助您使其更清晰。