【问题标题】:How can this function be simplified?如何简化此功能?
【发布时间】:2017-07-10 18:48:26
【问题描述】:

这是函数:

f []      = []
f (h:t)   = (\x -> x - h) : f t

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

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

我试图用map 来做这件事,但这只是将一个函数应用于列表的每个元素。我还尝试用 (-a) 替换匿名函数,但也没有用。

有人有想法吗?

【问题讨论】:

  • codegolf.stackexchange.com来说似乎是一个完美的问题
  • 嗯,(\x -> x - h)可以写成(- h)iirc
  • 正确的函数不应该是:f (h:t) = (\x -> x - h) : f t.
  • @Carcigenicate 这是 Haskell 语法的一个奇怪的角落。 (- h) 表示否定数字hsubtract h 相当于那个 lambda。
  • @Carcigenicate 不幸的是,不:(-h) 是一元减号,而不是一个部分!这就是为什么我们有来自Preludesubtract h

标签: list haskell lambda anonymous haskell-prelude


【解决方案1】:

你可以简单地使用:

f :: Num a => [a] -> [a -> a]
f = map subtract

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

【讨论】:

    猜你喜欢
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多