2011-09-10 14 views
5

Antecedentes: Ver también: http://mathworld.wolfram.com/TruthTable.htmlpregunta sobre la impresión de tablas lógicas con Mathematica

Mathematica proporciona lo siguiente función.

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]]] 

Imprimí una tabla de nand de la siguiente manera:

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 

que está como se esperaba, excepto por el título, me gustaría usar P, Q o A, B como variables.

  • Pregunta: No entiendo muy bien el uso de A en el código. Por favor comenta. (¿Tal vez utilicé la función incorrecta?)

Respuesta

11

El código suministrado no le permite elegir el símbolo o la lista de símbolos para las variables que se ponen en la operación lógica. En su lugar, solo crea una lista de variables del formulario {A[1],...,A[n]}.

una mínima modificación del código para permitir una lista proporcionada por el usuario de las variables (y algunos argumentos básicos de control) es algo así como

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]] 

La primera definición se imprimirá la tabla de verdad para cualquier lista dada de variables (puede ser cualquier expresión, pero los símbolos o cadenas simples parecen los más sensibles). La segunda definición funciona exactamente como el código original que proporcionó si se le dan dos argumentos, el tercer argumento opcional es la cadena a partir de la cual se construye el símbolo utilizado en la tabla de verdad.

A continuación, la tabla de verdad NAND se pueden imprimir como

TruthTable[Not[And[#1, #2]] &, 2, {P, Q}] 

nand

Se ve un poco mejor en TraditionalForm

TruthTable[Not[And[#1, #2]] &, 2, {P, Q}] // TraditionalForm 

nand v2

O incluso mejor ejecutado si se utiliza el incorporado Nand operador (que es sólo una forma bonita de Not[And[##]]&)

TruthTable[Nand, 3, {P, Q, R}] // TraditionalForm 

nand v3


En la reflexión, el argumento entero n en la función TruthTable podría ser un poco redundante si está suministrando una explícita lista de variables Lo dejo como ejercicio para que el lector modifique la función para que funcione sin ella ... :)

+0

Muchas gracias, ¡eso es exactamente lo que necesito! –