Il codice fornito non consente di scegliere il simbolo o un elenco di simboli per le variabili che vengono messi in operazione logica. Invece costruisce semplicemente un elenco di variabili del modulo {A[1],...,A[n]}
.
Una modifica minima del codice per consentire un elenco di utenti fornito di variabili (e un po 'argomento di base il controllo) è qualcosa di simile
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 prima definizione stamperà la tabella di verità per ogni elenco di variabili (può essere qualsiasi espressione, ma i simboli o le stringhe semplici sembrano i più sensibili). La seconda definizione funziona esattamente come il codice originale che hai fornito se hai due argomenti, il terzo argomento opzionale è la stringa da cui costruire il simbolo usato nella tabella di verità.
Poi il tavolo nand verità possono essere stampati come
TruthTable[Not[And[#1, #2]] &, 2, {P, Q}]
Sembra un po 'meglio in TraditionalForm
TruthTable[Not[And[#1, #2]] &, 2, {P, Q}] // TraditionalForm
O anche più ordinato, se si utilizza il incassato Nand
operatore (che è solo una bella forma di Not[And[##]]&
)
TruthTable[Nand, 3, {P, Q, R}] // TraditionalForm
Sulla riflessione, l'argomento intero n
nella funzione TruthTable
potrebbe essere un po 'ridondante se si intende inserire un esplicito lista di variabili. Lascio come un esercizio al lettore di modificare la funzione in modo che funzioni senza di essa ... :)
Grazie mille, questo è esattamente ciò di cui ho bisogno! –