| |
|
|
p.specht
| In der von George Boole begründeten zweiwertigen Logik gibt es nur Wahr und Falsch. Was aber, wenn man es einfach noch nicht entscheiden kann, aber soweit weiterarbeiten soll, wie es eben auf Grund der Datenlage bereits möglich ist? Dann benötigt man statt zwei eben drei Werte: Hinzu kommt der Wert "M" (engl. Maybe: Vielleicht, möglicherweise, kann_sein/wäre_erlaubt/weiss_nicht").
Eine Rosettacode-Aufgabe [...] fordert nun die geeignete Realisierung dieser dreiwertigen Logikfunktionen, die ich im nachfolgenden 3NOT(), 3AND(), 3OR(), 3XOR(), 3Equ() für die Gleichheitsfunktion und 3Imp() für die Implikationsfunktion (Wenn a dann b) genannt habe. Sie liegen nun in XProfan-11 vor, wobei ich den in der Literatur verwendeten Wert "M" oder "?" durch "2" angenähert habe. 0 bleibt weiterhin "false" und 1 weiterhin "true/Wahr). Wert wurde auch auf die Logiknormierung gelegt: ein Funktionswert 0 oder 2 bleibt erhalten, jeder andere Wert wird zu logisch wahr = 1 normiert. Die Funktionen harren nun einer vernünftigen Anwendung.
Windowtitle "Ternäre (Dreiwertige) Logikfunktionen"
Cls
proc 3val :parameters a%
case a%=0:return 0
case a%=2:return 2
return 1
endproc
proc 3not :parameters a%
case a%=2:return 2
return not(a%)
endproc
proc 3and :parameters a%,b%
if a%=0
return 0
elseif a%=2
case b%=0:return 0
return 2
else
return 3val(b%)
endif
endproc
proc 3or :parameters a%,b%
if a%=0
return 3val(b%)
elseif a%=2
case (b%=0) or (b%=2):return 2
return 1
else
return 1
endif
endproc
proc 3Equ :parameters a%,b%
if a%=0
return 3not(b%)
elseif a%=2
return 2
else
return 3val(b%)
endif
endproc
proc 3xor :parameters a%,b%
if a%=0
return 3val(b%)
elseif a%=2
return 2
else
return 3not(b%)
endif
endproc
proc 3Imp :parameters a%,b%
if a%=0:return 1
elseif a%=2
case b%=1:return 1
return 2
else
return 3val(b%)
endif
endproc
Test:
appendmenubar 100," 0 = false (F), 1 = true (T), ?=2: "+\
"weiss-nicht/möglicherweise/erlaubt/kann_sein/vielleicht (M, Maybe)"
declare a%,b%
print
print " -------------------------------"
print " a b not_a and or xor <=> ==>"
whileloop 0,4,2:a%=3val(&Loop)
whileloop 0,4,2:b%=3val(&Loop)
print " -------------------------------"
print " |",a%,b%,"|",3Not(a%),"|",3and(a%,b%),"|",3or(a%,b%),"|",
print 3xor(a%,b%),"|",3Equ(a%,b%),"|",3Imp(a%,b%),"|"
endwhile
endwhile
print " -------------------------------"
beep
waitinput
End
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 29.05.2021 ▲ |
|
|
|