haskell - Haskell - 在显示 2 次幂的函数中过滤赔率
问题描述
我有这个开发的功能,可以显示您选择的范围内的 2 的幂:
import Data.Bits(Bits, (.&.))
isPower2 :: (Bits i, Integral i) => i -> Bool
isPower2 n = n .&. (n-1) == 0
这很好用,但我只需要从所选范围的赔率数字中过滤 2 的幂,例如:
filter isPower2 [0 .. 1000]
[0,1,2,4,8,16,32,64,128,256,512]
上面的输入和输出显示了 0 到 1000 之间的所有功率,但我需要的只是赔率的功率,所以我需要的输出是:
[2,8,32,128,512]
有没有办法过滤这个函数只指向赔率数字?谢谢。
解决方案
我建议首先编写一个函数来检查 2 的幂是否是 2 的奇数幂。
power2isOddPower2 :: (Bits i, Integral i) => i -> Bool
也许首先考虑如何针对具体情况执行此操作Word8
,然后将其推广到任意正整数。
然后你可以将它与一个谓词结合起来,检查任意数字是否是 2 的奇次幂,并将其用于过滤:
filter (\n -> isPower2 n && power2isOddPower2 n) [0 .. 1000]
推荐阅读
- css - 社交媒体图标在我的在线网站上消失了,而它们出现在我的离线网站上
- ios - “无法监控事件循环”崩溃
- http - 有人可以给我 esp32 cam 的代码,以便使用 http post 方法将捕获的图像上传到本地服务器吗?
- sql - SQL 查找具有特定缺失属性的“客户”
- javascript - 指定的值“IN072”不是有效数字。该值必须与以下正则表达式匹配:-?
- reactjs - 如何使用 nginx 将所有 http 请求重定向到 https 以进行反应
- node.js - 节点快速路由中的 HTTPS 请求
- html - 如何仅在选定项目上动态应用 CSS [Angular]
- c - 为什么c中的createfile函数停止for循环
- sql-server - 处理Queue格式的表数据