微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

列表列表,最大1个偶数的列表数量

如何解决列表列表,最大1个偶数的列表数量

我是 Haskell 的新手,我使用递归尝试了这个

f :: [[Integer]] -> Integer
f [] = 0
f [x] = 1
f ((x : xs) : xss)
    | even x = 1 + f (xs : xss)
    | otherwise = f (xs : xss)

但不起作用,我认为这是完全错误的。如何使用递归、列表理解和映射、过滤函数来实现这一点? 例如,f[[2,3,4],[1,0],5,7]] = 2

解决方法

如果我猜对了磁贴,你想计算所有内部列表,其中最多有 1 个偶数。

所以让我们拆分一下 - 首先计算列表中的所有偶数:

evenNumberCount :: [Integer] -> Int
evenNumberCount ls = length (filter even ls)

有了这个,我们可以测试一个列表是否最多有一个:

atMostOneEvenNumber :: [Integer] -> Bool
atMostOneEvenNumber ls = evenNumberCount ls <= 1

我想在这一点上很容易将答案拼凑起来:

f :: [[Integer]] -> Int
f ls = length (filter atMostOneEvenNumber ls)

你的例子:

> f[[2,3,4],[1,0],5,7]]
2

注意:这有错误的签名(因为 length :: [a] -> Int) - 如果你想要 Integer 要么将 fromIntegral 添加到右侧或切换到 genericLength 并调整签名

(Haskellers 阅读注意事项:我知道 length :: Foldable t => t a -> Int 认为这在这里没有帮助;))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?