logik2021/codego/aussagenlogik/rekursion/rekursion.go

82 lines
2.0 KiB
Go
Raw Normal View History

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()
if tree.IsAtom() || tree.IsGeneric() {
2021-05-09 18:22:12 +02:00
if utils.StrListContains(I, tree.Expr) {
return 1
}
return 0
} else if tree.IsTautologySymbol() {
2021-05-09 18:22:12 +02:00
return 1
} else if tree.IsContradictionSymbol() {
2021-05-09 18:22:12 +02:00
return 0
} else if tree.IsNegation() {
2021-05-09 18:22:12 +02:00
subtree0, _ := tree.GetChild()
val0 := RekursivEval(subtree0, I)
return 1 - val0
} 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)
} 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
} 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)
} 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
} 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
} 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
}