[Int] ignoreFirstOnes (1:xs)-6ren">
gpt4 book ai didi

Haskell:简单函数的意外 "Not in scope"错误

转载 作者:行者123 更新时间:2023-12-01 11:25:53 27 4
gpt4 key购买 nike

这是一个非常特别的例子,描述了我遇到的 Not in scope: isOne 错误:

ignoreFirstOnes :: [Int] -> [Int]
ignoreFirstOnes (1:xs) = dropWhile isOne xs
ignoreFirstOnes xs = xs
where isOne = (== 1)

奇怪的是 isOne 函数定义在 where 中,但是编译器一直在提示。我可以使用 guards 甚至 dropWhile (== 1) 重写它,但我想了解如何使当前示例工作。

最佳答案

where 子句中定义的名称仅在 where 子句附加到的分支范围内。

这个版本的定义将编译,因为我将 where 子句附加到使用 isOneignoreFirstOnes 分支。

ignoreFirstOnes :: [Int] -> [Int]
ignoreFirstOnes (1:xs) = dropWhile isOne xs
where isOne = (== 1)
ignoreFirstOnes xs = xs

但请注意,此定义等同于 ignoreFirstOnes = dropWhile (==1),我认为这更简单。

关于Haskell:简单函数的意外 "Not in scope"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37225909/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com