Compare commits

..

No commits in common. "813a9842572989bcdaef47d6b0fb7a3961bc3231" and "5c43006abd1258baaf1d9d44882662d890c0dcb3" have entirely different histories.

3 changed files with 38 additions and 40 deletions

View File

@ -12,49 +12,50 @@ import (
func RekursivEval(tree syntaxbaum.SyntaxBaum, I []string) int { func RekursivEval(tree syntaxbaum.SyntaxBaum, I []string) int {
var children = tree.GetChildren() var children = tree.GetChildren()
if tree.IsAtom() || tree.IsGeneric() { switch tree.Kind {
case "atom", "generic":
if utils.StrListContains(I, tree.Expr) { if utils.StrListContains(I, tree.Expr) {
return 1 return 1
} }
return 0 return 0
} else if tree.IsTautologySymbol() { case "taut":
return 1 return 1
} else if tree.IsContradictionSymbol() { case "contradiction":
return 0 return 0
} else if tree.IsNegation() { case "not":
subtree0, _ := tree.GetChild() subtree0, _ := tree.GetChild()
val0 := RekursivEval(subtree0, I) val0 := RekursivEval(subtree0, I)
return 1 - val0 return 1 - val0
} else if tree.IsConjunction2() { case "and2":
val0 := RekursivEval(children[0], I) val0 := RekursivEval(children[0], I)
val1 := RekursivEval(children[1], I) val1 := RekursivEval(children[1], I)
return utils.Min2(val0, val1) return utils.Min2(val0, val1)
} else if tree.IsConjunction() { case "and":
var val = 1 var val = 1
for _, subtree := range children { for _, subtree := range children {
var val_ = RekursivEval(subtree, I) var val_ = RekursivEval(subtree, I)
val = utils.Min2(val, val_) val = utils.Min2(val, val_)
} }
return val return val
} else if tree.IsDisjunction2() { case "or2":
val0 := RekursivEval(children[0], I) val0 := RekursivEval(children[0], I)
val1 := RekursivEval(children[1], I) val1 := RekursivEval(children[1], I)
return utils.Max2(val0, val1) return utils.Max2(val0, val1)
} else if tree.IsDisjunction() { case "or":
var val = 0 var val = 0
for _, subtree := range children { for _, subtree := range children {
var val_ = RekursivEval(subtree, I) var val_ = RekursivEval(subtree, I)
val = utils.Max2(val, val_) val = utils.Max2(val, val_)
} }
return val return val
} else if tree.IsImplication() { case "implies":
val0 := RekursivEval(children[0], I) val0 := RekursivEval(children[0], I)
val1 := RekursivEval(children[1], I) val1 := RekursivEval(children[1], I)
if val0 <= val1 { if val0 <= val1 {
return 1 return 1
} }
return 0 return 0
} else { default:
log.Fatal("Could not evaluate expression!") log.Fatal("Could not evaluate expression!")
return 0 return 0
} }

View File

@ -73,62 +73,64 @@ func (tree SyntaxBaum) pretty(preindent string, tab string, prepend string, dept
// METHODS: Recognitong of Formula-Types // METHODS: Recognitong of Formula-Types
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
func (tree SyntaxBaum) IsIrreducible() bool { func (tree SyntaxBaum) isAtom() bool {
return tree.Valence == 0
}
func (tree SyntaxBaum) IsAtom() bool {
return tree.Kind == "atom" return tree.Kind == "atom"
} }
func (tree SyntaxBaum) IsLiteral() bool { func (tree SyntaxBaum) isLiteral() bool {
if tree.IsAtom() { if tree.isAtom() {
return true return true
} else if tree.IsNegation() { } else if tree.isNegation() {
subtree, err := tree.GetChild() subtree, err := tree.GetChild()
if err == nil { if err == nil {
return subtree.IsAtom() return subtree.isAtom()
} }
} }
return false return false
} }
func (tree SyntaxBaum) IsGeneric() bool { func (tree SyntaxBaum) isBeliebig() bool {
return tree.Kind == "generic" return tree.Kind == "generic"
} }
func (tree SyntaxBaum) IsTautologySymbol() bool { func (tree SyntaxBaum) isTrueSymbol() bool {
return tree.Kind == "taut" return tree.Kind == "taut"
} }
func (tree SyntaxBaum) IsContradictionSymbol() bool { func (tree SyntaxBaum) isFalseSymbol() bool {
return tree.Kind == "contradiction" return tree.Kind == "contradiction"
} }
func (tree SyntaxBaum) IsConnective() bool { func (tree SyntaxBaum) isNegation() bool {
return tree.Valence > 0
}
func (tree SyntaxBaum) IsNegation() bool {
return tree.Kind == "not" return tree.Kind == "not"
} }
func (tree SyntaxBaum) IsConjunction2() bool { func (tree SyntaxBaum) isConjunction() bool {
return tree.Kind == "and2" return tree.Kind == "and2"
} }
func (tree SyntaxBaum) IsConjunction() bool { func (tree SyntaxBaum) isLongConjunction() bool {
return tree.Kind == "and" || tree.Kind == "and2" switch tree.Kind {
case "and", "and2":
return true
default:
return false
}
} }
func (tree SyntaxBaum) IsDisjunction2() bool { func (tree SyntaxBaum) isDisjunction() bool {
return tree.Kind == "or2" return tree.Kind == "or2"
} }
func (tree SyntaxBaum) IsDisjunction() bool { func (tree SyntaxBaum) isLongDisjunction() bool {
return tree.Kind == "or" || tree.Kind == "or2" switch tree.Kind {
case "or", "or2":
return true
default:
return false
}
} }
func (tree SyntaxBaum) IsImplication() bool { func (tree SyntaxBaum) isImplication() bool {
return tree.Kind == "implies" return tree.Kind == "implies"
} }

View File

@ -8,9 +8,6 @@
# HILFSMETHODEN # HILFSMETHODEN
################################ ################################
export TEST_VERBOSE=false # <- true: unittest mit verbose output
export TEST_TIMEOUT="60s"
function call_go() { function call_go() {
go $@; go $@;
} }
@ -22,9 +19,7 @@ function check_requirements() {
function run_unittests(){ function run_unittests(){
echo -e "\033[1mUNITTESTS\033[0m\n"; echo -e "\033[1mUNITTESTS\033[0m\n";
local verbose_opt=""; call_go test -v -timeout 60s -count 1 -run "^Test[A-Z].*" "logik" "./...";
( $TEST_VERBOSE ) && verbose_opt="-v"
call_go test $verbose_opt -timeout $TEST_TIMEOUT -count 1 -run "^Test[A-Z].*" "logik" "./...";
} }
################################ ################################