2011-09-10 10 views
5

Background: Vedere anche: http://mathworld.wolfram.com/TruthTable.htmlDomanda sulla stampa le tabelle logiche con Mathematica

Mathematica fornito la seguente funzione.

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

ho stampato un tavolo di nand come segue:

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 

che è come previsto, tranne che per il titolo, vorrei utilizzare P, Q o A, B come variabili.

  • Domanda: Non capisco perfettamente l'uso di A nel codice. Per favore, commenta. (Forse ho usato la funzione non corretta?)

risposta

11

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

nand

Sembra un po 'meglio in TraditionalForm

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

nand v2

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 

nand v3


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 ... :)

+0

Grazie mille, questo è esattamente ciò di cui ho bisogno! –

Problemi correlati