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

Haskell 列表理解:显示偶数和双奇数元素

如何解决Haskell 列表理解:显示偶数和双奇数元素

我一直在处理一项任务,但我无法让它发挥作用。

我应该编写一个函数,它接受一个数字列表并返回一个显示偶数但将所有奇数加倍的列表。 (基本上相同的列表,但赔率翻了一番)。

doubleOdd :: [Integer] -> [Integer]
doubleOdd [] = []
doubleOdd a = [x*2 | x <- a,odd x]

我的问题是:

  1. 我只允许使用 +、-、*、/、==、/=、sum、mod、elem、maximum、odd、even
  2. 我不知道如何获得相同值的不同条件(例如,如果 x 是偶数 = x 并且在同一个列表理解中:如果 x 是奇数 = x*2)

到目前为止我只打印偶数或奇数,但从来没有同时打印.....

希望有人能帮助我。

解决方法

在递归情况下,用两个互斥的测试处理两种可能的情况,赔率的情况和偶数的情况:

doubleOdd a = [ .... | x <- a,y <- ([x*2 | .... x] ++ [x | .... x]) ]

由于两个测试是互斥的,所以只有一个结果。

您必须使用 ++if...then...else。我认为没有一种方法可以做到这一点。

或者也许可以通过一些算术技巧来完成,但那将是一个数学问题,而不是 Haskell 问题。

,

如果您正在寻找数学技巧版本:

> take 10 $ [ x + (x `mod` 2) * x | x <- [1..] ]
[2,2,6,4,10,14,8,18,10]

(你可以用mod做很多这样的作弊)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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”。这是什么意思?