如何简化此功能?

dYT*_*YTe 0 lambda haskell anonymous list haskell-prelude

这是功能:

f []      = []
f (h:t)   = (\x -> x - h) : f t
Run Code Online (Sandbox Code Playgroud)

它接受一个列表并返回一个匿名函数列表,它们从x中减去每个元素.

显然有一些方法可以用20个字符或更少的字符写这个整个函数.

我试着这样做,map但只是将一个函数应用于列表的每个元素.我也试图替换(-a)无效的匿名函数.

有人有想法吗?

Wil*_*sem 7

你可以简单地使用:

f :: Num a => [a] -> [a -> a]
f = map subtract
Run Code Online (Sandbox Code Playgroud)

因为subtract :: Num n => n -> n -> n,这意味着我们h将列表中的每个元素映射到一个函数subtract h.从任何给定值中减去h减法.所以.hxsubtract h x == x - h