问题标签 [pattern-guards]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
291 浏览

haskell - Haskell 说我的 Guard 有解析错误

所以过去几天我一直在玩 Haskell,我决定对斐波那契数列做一个基本定义。所以我写了这段代码:

我收到一条错误消息:

我怀疑标签错误,所以我尝试了我能找到的所有空格修复,但我就是找不到问题所在!

编辑:所以我按照人们的建议做了,现在我有这个代码:

我得到了同样的错误。

0 投票
2 回答
1223 浏览

scala - Scala 匹配带有保护的元组列表

我是 Scala 新手。作为一个练习,我试图在一个带有警卫的元组列表上编写一个匹配语句。我知道地图可以解决问题,但我正试图了解模式匹配。

我试图编写一个以 aList[(Char, Int)]作为参数的函数。该函数对条目进行排序,如果两个条目具有相同的键值,则将它们相加。所以下面的论点List(('q', 1'), ('a', 1), ('c', 2), ('a', 2), ('c', 1))会变成List(('a', 3), ('c', 3'), ('q', 1))

我附带以下代码:

但我收到以下警告:

:14:警告:没有结果的类型测试:List[(Char, Int)] 类型的值也不能是 List[(String, Int)] (List[(String, Int)] 的基础)(但仍然可能匹配它的擦除)

我尝试删除列表,但如果这样做,我会收到一个x类型为的错误Any

有什么建议么?

0 投票
1 回答
19248 浏览

haskell - Haskell - 保护内部案例声明

我正在通过Learn you a haskell book,在第8章有一段代码看起来像这样

这行得通。但是,我想将 if/else 块转换为这样的保护语句:

这不编译。似乎 Haskell 中守卫的使用非常严格/不直观。SO Ex1 SO Ex2。有没有我可以阅读的明确来源告诉我可以在哪些地方使用警卫?

0 投票
2 回答
1930 浏览

haskell - 保护语法中的逗号有什么作用?

在我正在阅读的代码库中,我发现了这样的函数声明(缺少某些部分):

逗号在这里有什么作用?

(只是作为奖励,如果有人很容易知道这一点:Haskell Programming from first principle中是否提到了这种语法,如果是,在哪里?因为我不记得读过它。)

0 投票
1 回答
757 浏览

haskell - Haskell:绑定模式匹配的地方

目前我正在尝试通过在线教程Learn you a Haskell 来学习 Haskell。在“函数中的语法”一章中,作者写道“您也可以使用 where 绑定来进行模式匹配!”。之后是代码示例的一部分,但我不知道在哪里使用模式匹配和新的 where 绑定。因为代码块的第一部分被缩短了(“我们可以将之前函数的 where 部分重写为”),你只能推断它,但我认为我选择了正确的部分。

功能:

要替换的新 where 部分:

因为我想了解本教程中讲解的所有 Haskell 代码示例和语法方法,所以希望有人能在这里解释一下模式匹配在哪里使用以及它是如何工作的。对我来说,问题是我只看到了守卫和一种将所有东西与体重和身高联系起来的图案。

0 投票
2 回答
950 浏览

haskell - 左箭头 <- 在 do 块之外是什么意思?

我最近遇到了以下代码,这让我很困扰

这段代码来自 https://phabricator.haskell.org/rGHCb0534f78a73f972e279eed4447a5687bd6a8308e

在文件 compiler/cmm/CmmLayoutStack.hs

第 983 行

我真的很想知道第二行中这是什么<-。我相信lowerSafeForeignCall是一个函数,而| 和“否则”表示此函数使用警卫。所以

必须是 Bool 类型。但是 <- 在任何 do 块之外。我在网上做了一些搜索,但仍然没有关于这种用法的任何线索。

0 投票
1 回答
79 浏览

haskell - 由于我使用了警卫,我的代码导致解析错误

我有以下代码:

当我尝试运行它时,我收到一条错误消息“输入'|'上的解析错误。它正在谈论的行是这一行:

我想我明白为什么了。我想这是因为我上面有两行没有被守卫屏蔽,当下面突然出现另一个守卫时,haskell 会感到困惑。但是在这些情况之后,我怎样才能添加额外的警卫呢?

我尝试使用分号分隔新行,但我对 Haskell 很陌生,因此对它的语法了解不多。