我想创建一个函数absmin,它可以得到一个浮点数列表,并返回到0的距离最小的那个数的数量。我们应该使用函数map来完成这个任务。我的第一个想法是函数abs提到了数量的问题,但我的问题是,如何才能创建到0的距离最小的点,以及使用map函数,谁能帮帮我?
absmin :: [Double] -> Int
absmin [] = []
absmin (x:xs) = abs (map (x:xs))
好了,现在我改成:
absmin xs = map abs xs
而是用规范:这不起作用,也许我是愚蠢的,但我尝试和尝试,它没有工作
2条答案
按热度按时间5jdjgkvh1#
如果你有一个像
[3.14, 2.98, -0.1]
这样的列表,并且需要找到哪个数字最接近于零,你需要首先将abs
Map到该列表,然后你需要找到最小值。现在
min
有了Ord a => a -> a -> a
的签名,所以它只会同时考虑两个数字。幸运的是,我们可以使用一个fold来折叠这个函数。这样做的问题是,我们不知道最接近零的数字是
0.1
还是-0.1
。我们可以定义一个
minBy
函数,它可以让我们基于fst
这样的函数来求两个值中的最小值。在我们将这个函数折叠到元组列表上之后,我们只需要对结果调用
snd
来获得原始值。oyjwcjzk2#
可以使用
min()
和abs()
函数查找数字列表中的最小绝对值,然后使用map()
将该值应用于列表中的每个元素。