haskell - 在 Haskell 中不断收到解析缩进错误我做错了什么
问题描述
cube = x*x*x
cube xs = map cube [x | x <-xs]
where x mod 2 == 1
所以我试图得到列表的奇数
谢谢大家的帮助!
解决方案
上面的代码片段包含一些错误:
- 您在这里
where
用作过滤器,但在 Haskell 中,where 子句用于定义局部范围的变量; - 你只定义
(x:xs)
模式,所以即使这样有效,它也会在空列表上出错; [x | x <- xs]
只是列表的恒等函数,因此我们可以省略它,此外,建议不要将变量命名为与“外部”变量相同的名称,因为这会造成混淆;和x mod 2 == 1
可以替换为odd :: Integral i => i -> Bool
。
我们可以这样写来解决这个问题:
cubeOdds2 :: Integral i => [i] -> [i]
cubeOdds2 = map cube . filter odd
where cube x = x * x * x
例如:
Prelude> cubeOdds2 [1,4,2,5]
[1,125]
因此,我们在这里使用filter :: (a -> Bool) -> [a] -> [a]
过滤列表,以便只保留奇数,然后使用作为函数map :: (a -> b) -> [a] -> [b]
对这些元素执行映射,cube
该函数接受一个元素并返回该元素的映射。
推荐阅读
- android - Android:将新项目添加到列表并使用 Kotlin 通过 RecyclerView 适配器显示它
- vb.net - 如果时间和时间之间的条件vb.net
- html - How to make only textbox less wide?
- macros - 如何扩展 Crystal 语言语法?
- azure - 垂直自动缩放 Azure VM
- javascript - 带有粘性页脚的页面中的垂直居中 div
- python - 如何在我的应用程序中从使用 Flask-JWT 迁移到 PyJWT?
- filter - 在过滤器期间获取空间而不是 +,
- sql - sql server 字符串最后拆分为一个
- php - Yii2 我如何在这个数组中使用 save()?