首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Haskell:组合存在量词和通用量词意外失败

Haskell是一种函数式编程语言,它具有强大的类型系统和纯函数的特性。在Haskell中,组合存在量词和通用量词可能会导致意外的失败。

组合存在量词是指存在一个元素满足某个条件。在Haskell中,可以使用函数exists来表示组合存在量词。例如,对于一个列表,可以使用exists函数来判断是否存在一个元素大于10:

代码语言:txt
复制
exists (> 10) [1, 2, 3, 4, 5]  -- 返回False
exists (> 10) [1, 2, 3, 11, 5] -- 返回True

通用量词是指对于所有元素都满足某个条件。在Haskell中,可以使用函数forall来表示通用量词。例如,对于一个列表,可以使用forall函数来判断是否所有元素都小于10:

代码语言:txt
复制
forall (< 10) [1, 2, 3, 4, 5]  -- 返回True
forall (< 10) [1, 2, 3, 11, 5] -- 返回False

然而,当组合存在量词和通用量词一起使用时,可能会导致意外的失败。这是因为组合存在量词和通用量词的语义在某些情况下可能会产生冲突。例如,考虑以下代码:

代码语言:txt
复制
exists (\x -> forall (\y -> x < y) [1, 2, 3]) [1, 2, 3]

这段代码的意思是存在一个元素x,对于所有元素y都满足x < y。然而,由于列表中的元素都是整数,不存在一个元素x,对于所有元素y都满足x < y,因此这段代码会导致意外的失败。

在Haskell中,避免组合存在量词和通用量词意外失败的一种方法是使用更精确的条件判断。例如,可以使用any函数和all函数来分别表示存在一个元素满足条件和所有元素都满足条件。修改上述代码如下:

代码语言:txt
复制
any (\x -> all (\y -> x < y) [1, 2, 3]) [1, 2, 3]

这段代码的意思是存在一个元素x,对于所有元素y都满足x < y。在这种情况下,代码会返回False,因为不存在一个元素x,对于所有元素y都满足x < y。

总结起来,Haskell中的组合存在量词和通用量词可能会导致意外的失败。为了避免这种情况,可以使用更精确的条件判断函数,如anyall

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

离散数学与组合数学-数理逻辑-02谓词演算及其形式系统-01个体谓词量词

2.1.3 量词 量词(quantifiers):谓词演算中的量词值数量词“所有”存在有”,分别用符号 \forall (全称量词 \exists (存在量词)来表示。...x P(x) 读作“有(存在) x 满足 P(x) ”。...一个可以回答真假的命题,不仅可以分析到简单命题,还可以分析到其中的个体、量词谓词。个体表示某一个物体或元素,量词表示数量,谓词表示个体的一种属性 。...公式∃ x(P(x)∧Q(x))表示存在有叶子的树,∃这里是存在量词,表示“至少存在一个”。 谓词演算除了一元谓词,也可以有二元 ,三元 ,甚至多元谓词。事实上,数学中的关系,函数都可以看成谓词。...命题演算中的恒真式等价式所反映的规律在谓词演算中仍成立。利用有关量词的等价式作等价变换,可以把任何一个谓词公式的量词移到公式的最前面,得到与之等价的前束标准形公式。

36540
  • 【数理逻辑】谓词逻辑 ( 个体词 | 个体域 | 谓词 | 全称量词 | 存在量词 | 谓词公式 | 习题 )

    复杂命题 示例 ( 1 ) 复杂命题的符号化 ( 2 ) 个体域变化 情况 的 两种分析 ( 3 ) 当且仅当 转化问题 ( 4 ) 使用 全称量词 存在量词 两种形式 进行命题符号化 一....或 存在量词 个体词 谓词 组合成的 谓词逻辑 , 也可以当做 一个 谓词逻辑 F(x) 或 G(x, y) 部件 再次进行组合 ; 如下 谓词逻辑 : \forall x (F(x) \rightarrow...S 前 加上 \lnot 也是谓词公式 , 注意外部带上括号 ; ( 组合后 该谓词公式可以当做原始谓词公式 S 使用 ) 3> 使用 联结词 将 两个 原始谓词公式 S 连接起来...x A(x) , 组合后 也是 谓词公式 ; ( 组合后 该谓词公式可以当做原始谓词公式 S 使用 ) ( 注意 前提 : 加入量词约束的 个体词 不能被 已有量词约束 ) 4> 步骤...性质 或 关系 ; ---- ( 4 ) 使用 全称量词 存在量词 两种形式 进行命题符号化 题目 : 1.要求 : 命题符号化 : 2.命题内容 : 并非所有的动物都是猫 解答 : 命题符号化

    2.2K30

    【数理逻辑】谓词逻辑的等值演算与推理演算 ( 个体词 | 谓词 | 量词 | 谓词逻辑公式 | 两个基本公式 | 命题符号化技巧 | 命题符号化示例 ) ★★

    1 : \exist x 表示个体域中 存在着的 x ; ④ 解读2 : \exist x( F(x) ) 表示 , 个体域中 存在 x 具有性质 F ; 3、 量词 全称量词 :...| 存在量词 | 谓词公式 | 习题 ) 二、 一阶谓词逻辑公式 ---- 命题公式 : 基本命题 ( 命题常元/变元 ) 若干 联结词 形成有限长度的字符串 ; ① 单个 命题变元 / 命题常元...由 全称量词存在量词 个体词 谓词 组合成的 谓词逻辑 , 也可以当做 一个 谓词逻辑 F(x) 或 G(x, y) 部件 再次进行组合 ; 如下 谓词逻辑 : \forall x (F...谓词逻辑 , 现在将其当做一个 性质 , 或者 谓词逻辑部件 A , 再次组合成 更加 复杂 庞大的 谓词逻辑 , 得到如下 : \forall x (F(x) \rightarrow A)...y 有 某种性质或关系 , ② 对于所有的 x 所有的 z 存在某种性质或关系 ; ③ y 与 z 具有相等的属性 ; ( 3 ) 性质 或 关系 反向推演 : 一般模式是

    1.2K00

    相爱相杀——正则与浏览器间的爱恨情仇

    回溯 : 匹配字元失败时,匹配位置回到之前位置+1的地方,然后继续匹配其他路径 结束 : 如果在某个位置发现完全匹配,那么匹配成功。否则执行回溯。如果回溯所有路径均没有匹配成功,那么就返回匹配失败。...那么反过来说,正则表达式越具体,可能执行的匹配回溯过程就越少。...可以看到,这个正则存在两个连续的贪婪量词,并且可以分组重复。假设待匹配文本的长度量级为n。那么连续的贪婪量词可以在为n之内进行任意组合,并且每一个组合可能还有n次分组重复的可能。...但是在某些复杂的场景中,贪婪量词的嵌套情况还是大大存在的,这里也许需要更多的思考。我们就不得不提到一个法宝。 原子组 很多正则表达式引擎都支持原子组,原子组的特点是它将组内的所有回溯位置全部丢弃。...环视 环视是一组匹配位置的规则,类似于^$,只匹配位置,不占字符,是零宽度的。有些地方也叫做零宽度断言。 关于环视具体细节不赘述,总之根据查找方向匹配与不匹配共分为四种: (?=...)

    51120

    一文掌握开发利器:正则表达式

    b)a negative lookbehind,后行否定断言,a 只有不在 b 后面才匹配 1.6 量词分支 字符 说明 a* 0 or more a+ 1 or more a?...在这之中,匹配过程都很顺利,并没发生意外(回溯)。...当遇到匹配不下去的情况,就会发生回溯,不断试错,直至失败或者成功。 量词 说明 a* 0 or more a+ 1 or more a?...0 or 1 a{5} exactly five a{2,} two or more a{1,3} between one & three 当多个贪婪量词挨着存在,并相互有冲突时,秉持的是"先到先得"...,再看看 RegexBuddy 的执行结果过程: 以上两个正则的基本执行步骤可以简单认为是: 贪婪匹配 回溯 直至发现匹配失败 但令人惊奇的是,第一个正则的从开始匹配到匹配失败这个过程只有 14 步。

    1.3K130121

    相爱相杀——正则与浏览器间的爱恨情仇

    回溯 : 匹配字元失败时,匹配位置回到之前位置+1的地方,然后继续匹配其他路径 结束 : 如果在某个位置发现完全匹配,那么匹配成功。否则执行回溯。如果回溯所有路径均没有匹配成功,那么就返回匹配失败。...那么反过来说,正则表达式越具体,可能执行的匹配回溯过程就越少。...可以看到,这个正则存在两个连续的贪婪量词,并且可以分组重复。假设待匹配文本的长度量级为n。那么连续的贪婪量词可以在为n之内进行任意组合,并且每一个组合可能还有n次分组重复的可能。...但是在某些复杂的场景中,贪婪量词的嵌套情况还是大大存在的,这里也许需要更多的思考。我们就不得不提到一个法宝。 原子组 很多正则表达式引擎都支持原子组,原子组的特点是它将组内的所有回溯位置全部丢弃。...环视 环视是一组匹配位置的规则,类似于^$,只匹配位置,不占字符,是零宽度的。有些地方也叫做零宽度断言。 关于环视具体细节不赘述,总之根据查找方向匹配与不匹配共分为四种: (?=...)

    76000

    正则表达式中的量词

    匹配失败,无论匹配的是正则表达式中的哪个符号块。说明在从文本中从A开始的各种字符串中,并不存在我们所需的字符串。...之后,引擎继续读取文本中的字符T正则表达式中的第一个字符块<,匹配失败,引擎读取文本中的下一个字符h,还是失败,直到读取到第15个字符<,匹配成功。...这样直到获得第一个匹配,那么匹配成功,引擎就把它当作了匹配结果,或者最大到最小的所有的可能都试过了都不行,那么当前这段字符串正则表达式的匹配就失败了。 有些同学可能对最大重复次数有些迷茫。....*,.可以匹配所有的字符,而*使.重复出现,而*又是贪婪的,所以引擎会不停地重复用.去匹配文本中的字符,直到读到文本的终结符,.终结符匹配失败,这个时候.的重复次数达到最大了,而引擎读取了之后的>,...四、占有型量词 在贪婪型量词的后面加一个+就成了占有型量词,占有型量词让被修饰字符重复最大次数。乍一看贪婪型量词没啥区别啊,其实少了三个字,尽可能。还是用上面的例子来说,此时正则表达式为.

    10810

    讲给前端的正则表达式(4):避免灾难性回溯

    为了帮助我们理解问题,还分析了贪婪懒惰量词以及为什么 lookahead 可能会有所帮助。 有些人遇到问题时会想:“我知道,我将使用正则表达式。”现在他们有两个问题了。...然后使用 * 量词,因此 ([0-9]+)* 产生两个子字符串:12345678 9 由于上述子字符串均不在字符串末尾,因此与 $ 匹配失败 引擎通过减少 [0-9]+ 匹配的位数来保持回溯 上述过程会产生多种不同的组合...通过将贪婪量词更改为惰性量词,有时可以提高性能,但是这个特定的例子并不属于这种情况。 先行断言(Lookahead) 要解决上述问题,最直接方法是完全重写正则表达式。...=([0-9]+)) 寻找最长的数字字符串,因为 + 是贪婪的 引擎不会回溯寻找不同的组合 表达式 (?...可以将它们分为贪婪懒惰两种量词,并且它们可能会对性能产生影响。我们还讨论了量词可能导致的另一个问题:灾难性回溯。

    58420

    学习正则表达式 - 量词

    {m,n} 是通用形式的量词,正则表达式还有三个常用量词,分别是 +、?、*。它们的形态虽然不同于 {m,n},功能却是相同的,因此也可以把它们理解为“量词简记法”。具体说明见下表。...常用量词 {m,n}等价形式 说明 * {0,} 出现零次、一次或多次 + {1,} 出现至少一次 ? {0,1} 出现至多一次 一、贪心、懒惰占有         量词自身是贪心的。...贪心量词会首先匹配整个字符串。尝试匹配时,它会选定尽可能多的内容,也就是整个输入。量词首次尝试匹配整个字符串,如果失败则回退一个字符后再次尝试。这个过程叫做回溯(backtracking)。...二、用 *、+ ? 进行匹配         这些量词默认是贪心的,这意味它们在第一次尝试时会尽可能多地匹配字符。...占有量词的优点是速度快,因为无需回溯。当然,匹配失败的话也很快。         为了理解这一点,我们先尝试匹配以零开头的多个零。

    17320

    精通正则表达式 - 打造高效正则表达式

    而在程序设计中,“通用”意味着速度慢,所以此种优化把 .* 之类的简单量词作为一个“整体”,正则引擎便不必按照通用的办法处理,而使用高速的,专门化的处理程序。...考察它们如何组合为 [^\\"]+(\\.[^\\"]+)*,首先它符合通用的模式 normal+(specialnormal+)*。...如果确认 special 部分 normal 部分永远不会匹配同样的文本,则特定目标字符串的匹配中存在唯一的 special 部分 normal 部分的“组合序列”。...如果有若干个量词存在于不同的层面,例如 (...*)*,就必须小心对待,但是许多这样的表达式却是完全没有问题的。...如果能抛弃这些状态,正则表达式就能迅速报告匹配失败。抛弃(或者是忽略)这些状态的方法有两种:固化分组占有优先量词

    70970

    离散数学-考纲版-02-谓词

    谓词 参考 离散数学与组合数学-08谓词逻辑 离散数学与组合数学-数理逻辑-02谓词演算及其形式系统 离散数学公式 !...\mathbb{Z} \mathbb{Z} 整数集 \varnothing \varnothing 空集 \forall \forall 对任意的 \exists \exists 存在..._{内容} 上标的输入命令式: x^2 x^2 空格 \quad R\mkern-10.5mu/ R\mkern-10.5mu/ 数值越大,斜杆越往字母左侧移动 2.1 命题 2.1 个体谓词量词...,遵循如下原则: 对于全称量词 (\forall x) ,刻划其对应个体域的特性谓词作为蕴含式前件加入 对于存在量词 (\exists x) ,刻划其对应个体域的特性谓词作为合取式合取项加入...(\forall x) ,刻划其对应个体域的特性谓词作为蕴含式前件加入 对于存在量词 (\exists x) ,刻划其对应个体域的特性谓词作为合取式合取项加入 示例一 示例二 示例三 示例四

    26610

    正则表达式-基本概念与简单元字符

    …] 字符组 匹配组内的单个字符 [^……] 排除性字符组 匹配单个未列出的字符 \meta 转义字符 特殊含义或转义元字符 英文点号可以匹配任意字符,但是不包括换行符,也就是说匹配到换行点号就匹配失败了...只有一个办法,那就是把它写在紧跟左中括号后面,[-a-z]匹配横杠a-z的所有字母,如果写在中间是会被当成关键字来解析的。...的量词上,前四个都是贪婪匹配的,也就是说他们会匹配尽可能多的字符,在匹配失败的时候才会停止,这有时候很有用,但有时候会让我们没有经过深思写出来的正则匹配到错误的内容。第四列在量词后面加了?...简写 上面两者组合可以匹配大部分字符了,不过有些写起来很繁琐,因此正则为我们提前定义好了一些简写,使用时可以减少表达式长度。...keyword.*13235413来匹配含有这个模式的一行日志,这里加不加问号对我们没有影响 找出一行里含有至少10个单词的行,假设单词以空格分割 ---- 这 是 自 己 的 思 考 线 ---- 不存在唯一的答案

    73440

    第四章 正则表达式回溯法原理

    其中第7步第10步是回溯。第7步与第4步一样,此时 b{1,3}匹配了两个"b",而第10步与第3步一样,此时 b{1,3}只匹配了一个"b",这也是 b{1,3}的最终匹配结果。...图中省略了尝试匹配双引号失败的过程。可以看出 .*是非常影响效率的。 为了减少一些不必要的回溯,可以把正则修改为 /"[^"]*"/。 3....即,尝试匹配失败时,接下来的一步通常就是回溯。 道理,我们是懂了。那么JS中正则表达式会产生回溯的地方都有哪些呢? 3.1 贪婪量词 之前的例子都是贪婪量词相关的。...只能说明匹配失败了。 虽然局部匹配是贪婪的,但也要满足整体能正确匹配。否则,皮之不存,毛将焉附? 此时我们不禁会问,如果当多个贪婪量词挨着存在,并相互有冲突时,此时会是怎样? 答案是,先下手为强!...3.2 惰性量词 惰性量词就是在贪婪量词后面加个问号。表示尽可能少的匹配,比如: var string = "12345";var regex = /(\d{1,3}?)

    1.1K60

    【数理逻辑】谓词逻辑 ( 谓词逻辑基本等值式 | 消除量词等值式 | 量词否定等值式 | 量词辖域收缩扩张等值式 | 量词分配等值式 )

    A ; 上述两个公式是等价的 ; 否定存在量词 : 存在量词 \exist 之前 的 否定联结词 , 可以移到 量词 之后 , 量词要变成 全称量词 \forall ; \lnot \exist...存在量词 辖域收缩扩张 ( 析取联结词 ) : \exist x ( A(x) \lor B ) \Leftrightarrow \exist x A(x) \lor B 左侧的存在量词 \exist...存在量词 辖域收缩扩张 ( 合取联结词 ) : \exist x ( A(x) \land B ) \Leftrightarrow \exist x A(x) \land B 左侧的存在量词 \exist...存在量词 辖域收缩扩张 ( 蕴含联结词 B 在左 ) : \exist x ( B \to A(x) ) \Leftrightarrow B \to \exist x A(x) 左侧的存在量词 \exist...x B(x) 理解 : 所有的对象都具有 A , B 两个性质 , 等价于 所有的对象都具有 A 性质 所有对象都具有 B 性质 ; 存全称量词 对于 合取联结词 \land 有分配率

    1.3K00

    离散数学与组合数学-08谓词逻辑

    本文为离散数据与组合数学电子科技大学王丽杰老师的课程笔记,详细视频参考 【电子科技大学】离散数学(上) 王丽杰 【电子科技大学】离散数学(下) 王丽杰 latex的离散数学写法参考:...离散数学与组合数学-01 离散数学公式 !...\mathbb{Z} \mathbb{Z} 整数集 \varnothing \varnothing 空集 \forall \forall 对任意的 \exists \exists 存在...x_{内容} x_{内容} 上标的输入命令式: x^2 x^2 空格 \quad R\mkern-10.5mu/ R\mkern-10.5mu/ 数值越大,斜杆越往字母左侧移动 离散数学与组合数学...-08谓词逻辑 8.1 谓词的引入 8.1.1 引入谓词逻辑 8.1.2 个体词与谓词 8.2 量词的引入 8.2.1 量词引入 8.2.2 个体域符号化 8.2.3 量词真值确定

    22620

    小心这个陷阱: 为什么JS中的 every()对空数组总返回 true

    在数学JavaScript中的“对所有”的量词 MDN页面 提供了为什么 every() 会对空数组返回 true 的答案: every 的行为就像数学中的“全称量词”。...在数学JavaScript中的“存在量词” JavaScript的 some() 方法实现了存在量化(existential quantification)中的“存在量词”(“存在”有时也被称为“存在...这个“存在量词”规定,对于任何空集合,结果都是假的。因此,some() 方法对空集合返回 false,并且也不会执行回调函数。...例如,如果你有一个依赖于数字数组的操作,并且在数组为空时会失败,那么在使用 every() 之前,你应该检查数组是否为空。...结论 当我第一次看到 every() 在空数组上的行为时,我感到很惊讶,但一旦你理解了这个操作的更大背景这个功能在各种语言中的广泛应用,就会觉得它是有道理的。

    21620

    正则表达式优化

    精通正则表达式》总结 [TOC] 第4章:表达式的匹配原理 引擎 DFA (Deterministic Finite Automaton 确定有穷自动机): 常见的只有MySQL,文本主导,不支持反向引用捕获括号...走其中一个分支,并保存备用状态 如果不成功再回溯尝试另一个分支 第5章:正则表达式实用技巧 (多选|分支)排序可能影响匹配结果 第6章:打造高效正则表达式 减少测试回溯 如果顺序不影响结果时更多匹配的放前面...检测(相连 量词{m,n}+* (捕获)) 成功/->2.传动 失败 常见措施 编译优化 缓存 传动优化 锚点(行始^ \A 起始\G 行末$ \Z \z) 隐式锚点(.* ....(尽可能少)通常比匹配优先量词慢 限制回溯,避免括号内外都是量词 避免指数级(超线性)匹配 使用占有优先量词(+不会回溯)减少状态 \d{4}量词优化比\d\d\d\d快(Java 几倍 Python...>固化分组)占有优先量词*+ 最可能匹配的分支放前面(POSIX 会全部尝试取最长就不需要) 结尾部分分散到各个部分(有些系统不需要如Perl的$) 消除循环 "(\\.|[^\\"]+)*" 优化为

    1.2K10
    领券