问题标签 [demorgans-law]

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 投票
1 回答
329 浏览

demorgans-law - 我什么时候应该在编程中应用德摩根定律?

我认为任何学习过编程课程的程序员都必须记住德摩根定律。

如果你不知道它是什么,这里是要点

!(A && B) = !A || !B
!(A || B) = !A && !B

我假设如果我必须记住它,我会发现它适用于编程情况。但我根本不需要使用它。

有什么理由我应该在编程中使用它吗?它是使程序更快,还是使条件更易于阅读?

0 投票
2 回答
773 浏览

haskell - 德摩根在 Haskell 中的定律通过 Curry-Howard 通信

我在 Haskell 中实施了四个德摩根定律中的三个:

但是,我认为不可能实施最后一条法律(有两个居民):

在我看来,有两种可能的解决方案:

  1. undefined代替?. _ 这不是一个好的解决方案,因为它是作弊。
  2. 使用单态类型或有界多态类型来编码默认值。

    这不是一个好的解决方案,因为它比德摩根定律更弱。

我们知道德摩根定律是正确的,但我假设最后一条定律不能用 Haskell 编码是否正确?这对 Curry-Howard 同构有什么看法?如果每个证明都不能转换成等效的计算机程序,那它就不是真正的同构,对吧?

0 投票
2 回答
2472 浏览

ruby - Ruby if 语句多个条件不相等

我不明白为什么不等于的多个 if 语句条件不起作用。在irb

但这有效:

我在这里想念什么?

0 投票
2 回答
314 浏览

boolean-logic - 布尔逻辑:德摩根定理,与非门

我正在尝试为我的布尔方程的以下部分构建一个电路:

扩展这一点,我们当然得到:

根据德摩根定理,我认为我们可以将其简化为

我虽然可以简化为:ABCDE,因为 A * A = A。

但是,当我将 ABCDE 放入 NAND 门时,我没有得到我需要的结果。为什么是这样?我的逻辑哪里出错了?

编辑:所以@Leandro Caniglia 解释了这个问题:

那么我可以减少它的最远距离: (AB)! + !C(DE)!

有没有其他方法可以简化它?

0 投票
1 回答
412 浏览

boolean-logic - 反相输入的与非门

如果我要表达:

并使用德摩根定律将其转换为:

在将其放入与非门之前,我是否必须反转每个位?有没有更简单的方法?

编辑:没有捷径。你必须做(!A!B!C!D!E)!

0 投票
1 回答
188 浏览

haskell - 德摩根定律实施中的 Haskell 点 (.) 运算符

这个问题中,作者在 Haskell 中编写了德摩根定律的实现。我了解notAandnotB, 和的实现notAornotB,但我很难理解其实现notAorB是:

有人可以解释这(f . Left, f . Right)部分是如何工作的吗?我见过.之前使用过的运算符,但它带有三个参数,而不是两个。

先感谢您。

0 投票
1 回答
207 浏览

boolean - 德摩根定律优化不起作用

我有布尔表达式,使用卡诺图(第一行)进行了简化。然后我使用德摩根定律使表达式适合仅使用与非门(第二行)。但是当我创建一个逻辑门电路时,它不能正常工作,无论我怎么看这个电路,我都看不出我在哪里犯了错误。很抱歉在图片中发布表情,我不知道如何将这个表情从纸上转移到电脑上。简化表达式和德摩根的版本

使用与非门的逻辑电路

0 投票
1 回答
100 浏览

prolog - 替换数学公式中的参数时出错

在替换数学公式中的参数时,我遇到了一些递归问题。

我使用谓词替换数学公式中的参数。

在 1 种情况下,它可以正常工作,当:

  • % 初始公式:(x y/5-z)+x y*w
  • % 查找:x*y
  • % 替换:xa*y+1
  • % 在前缀视图中准备公式:+/*xy -5z **xyw
  • % 在前缀视图中查找:*xy
  • % 在前缀视图中替换:*-xa+y1

%正确工作示例

% 替换后的结果:

在 2 情况下它不起作用,我无法解决问题,已经几天了......

  • % 初始公式:((x->z)->((y->z)->(x/y->z))->(x/y->z))
  • % 查找:A->B
  • % 替换:不是(A/B)
  • % 评论:逻辑德摩根规则。蕴涵定理。
  • % 在前缀视图中准备公式:( ->->->xz ->->yz->/xyz ->/xyz )
  • % 在前缀视图中查找:->(A, B)
  • % 在前缀视图中替换:not(/(A, B))

%不工作示例 1):

% 替换后的结果:

%尝试了另一种方式,但没有成功达到目标:

% 替换后的结果:

但是,如果手动将先前的结果插入到新的调用中,那么将再进行一次替换。

%从replace3手动插入之前的结果到replace4

% 替换后的结果:

有人可以给我建议做错了什么吗?我试图尽可能完整地解释。非常感谢您的帮助!

0 投票
1 回答
70 浏览

boolean - 使用 DeMorgans 简化布尔表达式

这是我需要简化的表达式:

[{(AB)'*(BC)'} + (A'C)']'

现在我的答案是(AB + BC)。(A' + C)

我不认为我的答案是正确的,但我不确定。如果有人可以展示如何简化的步骤,将不胜感激,谢谢!

0 投票
1 回答
114 浏览

expression - 逻辑表达式,化简

我目前正在尝试学习如何简化逻辑表达式。但是我被困在了这个任务上,我要证明这个表达式要么是重言式,要么是矛盾的。我需要一些帮助来简化以下表达式:

(a and not b) or (not a or b)

我不知道从哪里开始简化。如果有人能告诉我应该从哪条法律开始,我将不胜感激。