背景: 另见:http://mathworld.wolfram.com/TruthTable.html
Mathematica提供了以下功能。
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表,如下所示:
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作为变量。
答案 0 :(得分:11)
提供的代码不允许您为逻辑运算中的变量选择符号或符号列表。它只是构造一个{A[1],...,A[n]}
形式的变量列表。
允许用户提供的变量列表(以及一些基本的参数检查)的代码的最小修改类似于
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真值表可以打印为
TruthTable[Not[And[#1, #2]] &, 2, {P, Q}]
在TraditionalForm
TruthTable[Not[And[#1, #2]] &, 2, {P, Q}] // TraditionalForm
如果您使用内置的Nand
运算符(这只是Not[And[##]]&
的一种非常形式)
TruthTable[Nand, 3, {P, Q, R}] // TraditionalForm
在反射时,n
函数中的整数参数TruthTable
如果要提供明确的变量列表,可能会有点多余。我将它作为练习留给读者来修改功能,以便在没有它的情况下工作......:)