我如何指定我希望在Haskell中显示某些内容



我有一个保护,条件是查找x列表==某个东西,即x在列表中。我试过了:

| lookup x list == _ = my code here

但是当加载函数时,我得到了一个"表达式上下文中的模式语法"错误?

你应该使用类似的防护

| any ((x ==) . fst) list = ... code ...

您收到的特定错误消息是因为_不是有效的标识符。令牌_仅在模式匹配中有效,并且模式匹配只能在明确允许的地方使用。模式从来都不是一个表达式,所以它们不能在任何需要任意表达式的地方使用。

如果您在GHC中启用PatternGuards扩展,您也可以使用以下语法执行您想要的操作:

| Just _ <- lookup x list = ... code ...

请注意,我匹配的是Just结果,而不是所有结果。请记住,当lookup找不到东西时,它仍然会产生一个值,并且_模式匹配所有值。

注意到模式保护语法在这里的输入量是相同的,在这种情况下使用它的好处是,如果您愿意,它还可以将名称绑定到所查找的值。

| Just y <- lookup x list = ... code that uses y...

在没有图案保护的情况下这样做需要在身体内部进行图案匹配,这可能有点不令人满意。

或者,如果您发现要将免费模式匹配隐藏在库中。。。

import Data.Maybe (fromJust)
...
    | isJust (lookup x list) = ...

相关内容

  • 没有找到相关文章

最新更新