首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于用Mathematica打印逻辑表的问题

关于用Mathematica打印逻辑表的问题
EN

Stack Overflow用户
提问于 2011-09-10 09:37:20
回答 1查看 762关注 0票数 5

背景:另见:http://mathworld.wolfram.com/TruthTable.html

Mathematica提供了以下功能。

代码语言:javascript
复制
 TruthTable[op_, n_] := 
  Module[{l = 
     Flatten[Outer[List, Sequence @@ Table[{True, False}, {n}]], 
      n - 1], a = Array[A, n]}, 
   DisplayForm[
    GridBox[Prepend[Append[#, op @@ #] & /@ l, Append[a, op @@ a]], 
     RowLines -> True, ColumnLines -> True]]]

我打印了一张nand表如下:

代码语言:javascript
复制
 TruthTable[Not[And[#1, #2]] &, 2]

 A[1]   A[2]    !(A[1]&&A[2])
 True   True    False
 True   False   True
 False  True    True
 False  False   True

这是预期的,除了标题,我想用P,Q或A,B作为变量。

  • 问题:我不太明白A在代码中的用法。请发表意见。(也许我使用的函数不正确?)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-10 11:11:49

所提供的代码不允许您为逻辑操作中的变量选择符号或符号列表。相反,它只是构造了表单{A[1],...,A[n]}的变量列表。

对代码的最小修改允许用户提供的变量列表(以及一些基本的参数检查)如下所示

代码语言:javascript
复制
TruthTable[op_, n_Integer?Positive, symbs_List] := Module[{
   l = Flatten[Outer[List, Sequence @@ Table[{True, False}, {n}]], n - 1]}, 
  DisplayForm[GridBox[Prepend[Append[#, op @@ #] & /@ l, 
     Append[symbs, op @@ symbs]], RowLines -> True, 
    ColumnLines -> True]]] /; Length[symbs] == n

TruthTable[op_, n_Integer?Positive, symb_String: "A"] := 
 TruthTable[op, n, Array[Symbol[symb], n]]

第一个定义将为任何给定的变量列表打印真值表(可以是任何表达式,但简单的符号或字符串看起来最合理)。如果给出两个参数,则第二个定义与您提供的原始代码完全一样,可选的第三个参数是用来构造真值表中使用的符号的字符串。

然后,nand真值表可以打印为

代码语言:javascript
复制
TruthTable[Not[And[#1, #2]] &, 2, {P, Q}]

它在TraditionalForm中看起来稍微好一点

代码语言:javascript
复制
TruthTable[Not[And[#1, #2]] &, 2, {P, Q}] // TraditionalForm

如果使用内置的Nand运算符(这只是Not[And[##]]&的一种很好的形式),就更整洁了。

代码语言:javascript
复制
TruthTable[Nand, 3, {P, Q, R}] // TraditionalForm

经过反思,如果您要提供一个显式的变量列表,则TruthTable函数中的整数参数TruthTable可能会有些冗余。我把它作为一个练习留给读者去修改这个函数,这样它就可以不用它了.:)

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7370874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档