- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我使用 pycharm 并且在使用 if
语句时有几次我看到了使用 De Morgan 定律更改语句的建议,例如以下 if
语句:
if new_odds > 10 and new_odds <= 30:
if not (not (new_odds > 10) or not (new_odds <= 20)):
对我来说,这会降低它的可读性,那么使用德摩根定律是否有任何优势,还是完全是个人选择?
最佳答案
"not (A and B)" is the same as "(not A) or (not B)"
and also,
"not (A or B)" is the same as "(not A) and (not B)"
用于在替代形式之间转换逻辑。因此,虽然您所做的转换符合德摩根定律,但它变得更难阅读了。正如其他人所建议的那样简单得多 10 < new_odds <= 30
将更具可读性,但是了解这是 10 < new_odds and new_odds <= 30
的缩写非常重要因为,从这里开始你可以做这样的逻辑:
10 < new_odds <= 30 != max_odds | default_condition
扩展为:
10 < new_odds and new_odds <= 30 and 30 != max_odds and max_odds | default_condition
我们将在简单的角色扮演游戏中考虑一个人为的例子,我们将在其中查看我们称为“荷兰勇气”的技能。这种攻击的前提是,如果你处于最大生命值,并且你的护甲或攻击等级不足以攻击敌人,你可以获得加成。我需要知道这条规则何时不适用。
写出来我们有 4 个条件:
A = health == max_health
B = armor > enemy.attack
C = attack > enemy.defense
no_bonus = not(A and not(B and C))
使用 De Morgan 定律,我可以将其分解为:
not(A and not(B and C))
not(A) or not(B and C)
not(A) or not(B) or not(C)
not(health == max_health) or not(armor > enemy.attack) or (attack > enemy.defense)
好吧,现在我可以进一步分解...
health < max_meath or armor < enemy.attack < attack > enemy.defense
这里我们假设与== max_health
相反是< max_health
否则它不是最大值。
虽然做作,但这向我们表明德摩根定律是一种使我们能够重写逻辑的工具。这种逻辑是否得到改进取决于程序员,但目的是能够生成更简单的结构,首先是更具可读性,其次希望需要的指令更少,因此速度更快。
关于python - 在 python 中使用德摩根定律有什么好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21320961/
一年多以来,我一直在阅读C++并用它编写小程序。最近我遇到了三巨头法则。我从来不知道这条法律。 无意中,我在这里找到了它:Rule of Three . 我可以知道 C++ 中的任何其他此类定律吗?
根据 Control.Arrow 文档,对于许多 monads(那些 >>= 操作是严格的)instance MonadFix m => ArrowLoop (Kleisli m)不满足 loop (
通常在 Haskell 中我们定义 Monad s 表示为 return和>>= 。有时分解也方便>>=进入fmap和join 。 Monad一旦您习惯了这两种公式的定律,它们是众所周知的并且相当直观
我正在阅读 James Iry's blog post在 Scala 中的 Monads 上。我在第三部分,我对他关于单元的单子(monad)第二定律的描述感到困惑。特别是这种说法: unit(x)
我见过提到 IO不满足单子(monad)定律,但我没有找到一个简单的例子来说明这一点。有人知道一个例子吗?谢谢。 编辑:如ertes和 n.m.指出,使用 seq有点非法,因为它可以使任何 monad
齐普夫定律是许多现实生活中的一种模式,齐普夫定律最常见的情况是在文本段落中,其中最常用的单词的数量是第二个最常用单词的两倍。 我一直在学习 Python 中的字典,并尝试自己做这件事,但对它们的一些方
这可能是一个幼稚的问题,但是 RSpec 的测试 DSL 是否违反了 Demeter 法则? 这是来自 http://rspec.info 的 RSpec DSL 示例: bowling.score.
Snell's law指出入射角和折射角的正弦比等于给定 Material 折射率比的倒数: 我想实现一个简单的程序来可视化法律。自 , 和 是已知的,这是我计算的方式 : theta2 = asin
嘿,我正在开发一个文本生成器,它应该可以生成数百万种不同的文本。为了使每篇文章的内容更真实,我使用了 Zipf 定律它运行良好,单词分布正确。 但是下面的 next() 函数执行得非常慢,因为我想生成
我正在使用一个工具来自动生成按层次结构组织的 XML 文件的类表示形式。 XML 文件是我的应用程序需要能够访问的设置文件(只读)。 如果我将顶级节点(例如,AppSettings)传递给需要访问一项
不使用形式推导,如何测试自定义的Monad实例是否遵循Monad定律? 最佳答案 FWIW,这是我最近编写的一组 QuickCheck 属性,用于测试从 F 代数派生的 Maybe 实现的 Monad
我是一名优秀的程序员,十分优秀!