haskell - Haskell - 检查位置是否是偶数/奇数
问题描述
我需要做的是在列表中交替应用 2 个函数。例如:
(*2) (-3) [4,5,6,7,8]
会导致
[8,2,12,4,16]
, 因为4*2
, 5-3
, 6*2
, 7-3
, 8*2
...
我在想的是
funct :: (a -> b) -> (a -> b) -> [a] -> [b]
然后像
[f x | x <- xs]
但是我不会只有“ f
”,但也会有其他功能。
所以我在考虑检查 的位置x
。如果它是一个偶数位置,那么f x
。否则g x
。
有人可以帮助我吗?
谢了。
解决方案
您实际上并不需要索引,您需要的是一个在(*2)
和之间交替的列表(-3)
。我们可以利用cycle :: [a] -> [a]
and zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
。因此我们可以使用:
zipWith ($) (cycle [(2*), subtract 3]) [4,5,6,7,8]
这里($) :: (a -> b) -> a -> b
用于执行功能应用程序。所以($) f x
等价于f x
。
这给出了预期:
Prelude> zipWith ($) (cycle [(2*), subtract 3]) [4,5,6,7,8]
[8,2,12,4,16]
推荐阅读
- python-3.x - 设置 Numpy logical_or 为 True 返回 1,为 false 返回 0
- api - 对 .netcore 中服务端文件的物理访问
- upgrade - 将 M0 集群指向同一区域和账户中的现有 M10 集群
- angular - 量角器出现问题的原因 = 失败:脚本超时错误
- microsoft-graph-api - com.microsoft.aad.msal4j.AcquireTokenByDeviceCodeFlowSupplier 类的执行失败
- sql - 在 Hive 中,如何在 XML 中多次出现的相同父标签下分解相同的子标签?
- javascript - 无法设置最小日期
- php - 如何获取常量的值并将其保存到数据库中
- python - 将日期时间字符串转换为日期时间格式(日文字符)
- yaml - 在 yaml 文件中,如何在不同键(.yml 文件)的另一个长列表值之间/之间使用键的值