gpt4 book ai didi

Haskell map函数,返回一个没有零的列表

转载 作者:行者123 更新时间:2023-12-02 06:27:30 26 4
gpt4 key购买 nike

这是我的代码:

x = map classify[1..20] 

classify :: Int -> Int
classify n
| n `mod` 2 == 0 = n + 2
| otherwise = 0

当调用 x 时它返回一个列表

[0,4,0,6,0,8,0,10,0,12,0,14,0,16,0,18,0,20,0,22]

如何指定我只想要非 0 的数字是列表:

[4,6,8,10,12,14,16,18,20,22]

最佳答案

您可以使用 filter :: (a -> Bool) -> [a] -> [a]为了这。这个函数接受一个函数(a -> Bool 类型,称为“predicate”)和一个列表,它生成满足 predicate 的值列表(返回 True 该元素)。

所以你可以过滤掉零:

filter (0 /=) mylist

对于您的示例列表,这会生成:

Prelude> filter (0 /=) [0,4,0,6,0,8,0,10,0,12,0,14,0,16,0,18,0,20,0,22]
[4,6,8,10,12,14,16,18,20,22]

话虽这么说,对于这种特定情况,您可以通过制作“2 跳”来避免首先生成此类元素的麻烦:

x = map classify <b>[2, 4..20]</b>

这将映射一个包含[2,4,6,8,10,12,14,16,18,20]所有元素的列表在两者之间 - 给定你的功能 - 被映射到零。通过两次跳跃,我们首先避免了计算这些值。但这当然只适用于这种特定情况。

关于Haskell map函数,返回一个没有零的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53036072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com