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}]
Se ve un poco mejor en TraditionalForm
TruthTable[Not[And[#1, #2]] &, 2, {P, Q}] // TraditionalForm
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
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 ... :)
Muchas gracias, ¡eso es exactamente lo que necesito! –