Haskell a->;是否有一个简短的Lambda表达式;a->;点菜?
Lambda表达式可以让生活变得更轻松,我喜欢这种方式,你可以将Haskell a->;是否有一个简短的Lambda表达式;a->;点菜?,haskell,lambda,anonymous-function,Haskell,Lambda,Anonymous Function,Lambda表达式可以让生活变得更轻松,我喜欢这种方式,你可以将(\x->x+1)等表达式缩短为(+1) 这就是为什么我想知道,对于接受两个参数并返回排序的匿名函数,是否存在类似的情况 例如:能否缩短此代码: sortByFirst :: Ord a => [(a, b)] -> [(a, b)] sortByFirst = sortBy (\x y -> fst x `compare` fst y) 您可以使用Data.function模块中的on功能 import Dat
(\x->x+1)
等表达式缩短为(+1)
这就是为什么我想知道,对于接受两个参数并返回排序的匿名函数,是否存在类似的情况
例如:能否缩短此代码:
sortByFirst :: Ord a => [(a, b)] -> [(a, b)]
sortByFirst = sortBy (\x y -> fst x `compare` fst y)
您可以使用Data.function
模块中的on
功能
import Data.List
sortByFirst = sortBy (compare `on` fst)
关于
的定义大致如下
on f g = \x y -> f (g x) (g y)
您可以使用
Data.function
模块中的on
功能
import Data.List
sortByFirst = sortBy (compare `on` fst)
关于的定义大致如下
on f g = \x y -> f (g x) (g y)
通过从
Data.Ord
比较,它可以拼写为
sortByFirst = sortBy (comparing fst)
。。。这相当于中的
compare`on`fst
(
Data.List
还提供了一个sortOn::Ord b=>(a->b)->[a]->[a]
,但这是一个特殊用途的函数,只有当涉及的a->b
函数有些昂贵,而fst
不是的时候才值得使用。)与比较数据中的,它可以拼写为
sortByFirst = sortBy (comparing fst)
。。。这相当于中的
compare`on`fst
(Data.List
还提供了一个sortOn::Ord b=>(a->b)->[a]->[a]
,但这是一个特殊用途的函数,只有当涉及的a->b
函数有点昂贵时才值得使用,而fst
则不是。)甚至更甜蜜:与比较数据中的,sortByFirst=sortBy(比较fst)
Oops,忘记了那个特定的函数。谢谢,这正是我想要的@Jere,sortOn
的效率低于这个答案中定义的sortByFirst
。更甜蜜的是:通过比较数据。Ord
,sortByFirst=sortBy(比较fst)
哦,忘记了那个特定的函数。谢谢,这正是我想要的@Jere,sortOn
的效率低于此答案中定义的sortByFirst
。sortByFirst=sortOn fst
sortByFirst=sortOn fst