2021-05-09 18:22:12 +02:00
|
|
|
package rekursion
|
|
|
|
|
|
|
|
import (
|
|
|
|
"log"
|
|
|
|
"logik/aussagenlogik/syntaxbaum"
|
|
|
|
"logik/core/utils"
|
|
|
|
)
|
|
|
|
|
|
|
|
/* ---------------------------------------------------------------- *
|
|
|
|
* EXPORTS
|
|
|
|
* ---------------------------------------------------------------- */
|
|
|
|
|
|
|
|
func RekursivEval(tree syntaxbaum.SyntaxBaum, I []string) int {
|
|
|
|
var children = tree.GetChildren()
|
2021-05-09 20:41:24 +02:00
|
|
|
if tree.IsAtom() || tree.IsGeneric() {
|
2021-05-09 18:22:12 +02:00
|
|
|
if utils.StrListContains(I, tree.Expr) {
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
return 0
|
2021-05-09 20:41:24 +02:00
|
|
|
} else if tree.IsTautologySymbol() {
|
2021-05-09 18:22:12 +02:00
|
|
|
return 1
|
2021-05-09 20:41:24 +02:00
|
|
|
} else if tree.IsContradictionSymbol() {
|
2021-05-09 18:22:12 +02:00
|
|
|
return 0
|
2021-05-09 20:41:24 +02:00
|
|
|
} else if tree.IsNegation() {
|
2021-05-09 18:22:12 +02:00
|
|
|
subtree0, _ := tree.GetChild()
|
|
|
|
val0 := RekursivEval(subtree0, I)
|
|
|
|
return 1 - val0
|
2021-05-09 20:41:24 +02:00
|
|
|
} else if tree.IsConjunction2() {
|
2021-05-09 18:22:12 +02:00
|
|
|
val0 := RekursivEval(children[0], I)
|
|
|
|
val1 := RekursivEval(children[1], I)
|
|
|
|
return utils.Min2(val0, val1)
|
2021-05-09 20:41:24 +02:00
|
|
|
} else if tree.IsConjunction() {
|
2021-05-09 18:22:12 +02:00
|
|
|
var val = 1
|
|
|
|
for _, subtree := range children {
|
|
|
|
var val_ = RekursivEval(subtree, I)
|
|
|
|
val = utils.Min2(val, val_)
|
|
|
|
}
|
|
|
|
return val
|
2021-05-09 20:41:24 +02:00
|
|
|
} else if tree.IsDisjunction2() {
|
2021-05-09 18:22:12 +02:00
|
|
|
val0 := RekursivEval(children[0], I)
|
|
|
|
val1 := RekursivEval(children[1], I)
|
|
|
|
return utils.Max2(val0, val1)
|
2021-05-09 20:41:24 +02:00
|
|
|
} else if tree.IsDisjunction() {
|
2021-05-09 18:22:12 +02:00
|
|
|
var val = 0
|
|
|
|
for _, subtree := range children {
|
|
|
|
var val_ = RekursivEval(subtree, I)
|
|
|
|
val = utils.Max2(val, val_)
|
|
|
|
}
|
|
|
|
return val
|
2021-05-09 20:41:24 +02:00
|
|
|
} else if tree.IsImplication() {
|
2021-05-09 18:22:12 +02:00
|
|
|
val0 := RekursivEval(children[0], I)
|
|
|
|
val1 := RekursivEval(children[1], I)
|
|
|
|
if val0 <= val1 {
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
return 0
|
2021-05-09 20:41:24 +02:00
|
|
|
} else {
|
2021-05-09 18:22:12 +02:00
|
|
|
log.Fatal("Could not evaluate expression!")
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func RekursivAtoms(tree syntaxbaum.SyntaxBaum) []string {
|
|
|
|
// Herausforderung: schreibe diese Funktion!
|
|
|
|
return []string{}
|
|
|
|
}
|
|
|
|
|
|
|
|
func RekursivDepth(tree syntaxbaum.SyntaxBaum) int {
|
|
|
|
// Herausforderung: schreibe diese Funktion!
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
func RekursivLength(tree syntaxbaum.SyntaxBaum) int {
|
|
|
|
// Herausforderung: schreibe diese Funktion!
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
func RekursivParentheses(tree syntaxbaum.SyntaxBaum) int {
|
|
|
|
// Herausforderung: schreibe diese Funktion!
|
|
|
|
return 0
|
|
|
|
}
|