2021-05-09 18:22:12 +02:00
|
|
|
package rekursion
|
|
|
|
|
|
|
|
import (
|
|
|
|
"logik/aussagenlogik/syntaxbaum"
|
|
|
|
"logik/core/utils"
|
|
|
|
)
|
|
|
|
|
|
|
|
/* ---------------------------------------------------------------- *
|
|
|
|
* EXPORTS
|
|
|
|
* ---------------------------------------------------------------- */
|
|
|
|
|
2021-05-12 18:45:43 +02:00
|
|
|
type RekursiveChannelInt struct {
|
|
|
|
channel chan int
|
|
|
|
}
|
|
|
|
|
|
|
|
func RekursivEval(ch chan int, tree syntaxbaum.SyntaxBaum, I []string) {
|
|
|
|
// Werte für Teilformeln rekursiv berechnen
|
|
|
|
fn := func(_ch chan int, _tree syntaxbaum.SyntaxBaum) { RekursivEval(_ch, _tree, I) }
|
|
|
|
var values = RekursiveCallInt(fn, tree.GetChildren())
|
|
|
|
// Aus Werten für Teilformeln Wert für Formeln berechnen
|
2021-05-09 20:41:24 +02:00
|
|
|
if tree.IsAtom() || tree.IsGeneric() {
|
2021-05-12 18:45:43 +02:00
|
|
|
ch <- utils.BoolToInt(utils.StrListContains(I, tree.GetExpr()))
|
2021-05-09 20:41:24 +02:00
|
|
|
} else if tree.IsTautologySymbol() {
|
2021-05-12 18:45:43 +02:00
|
|
|
ch <- 1
|
2021-05-09 20:41:24 +02:00
|
|
|
} else if tree.IsContradictionSymbol() {
|
2021-05-12 18:45:43 +02:00
|
|
|
ch <- 0
|
2021-05-09 20:41:24 +02:00
|
|
|
} else if tree.IsNegation() {
|
2021-05-12 18:45:43 +02:00
|
|
|
ch <- 1 - values[0]
|
2021-05-09 20:41:24 +02:00
|
|
|
} else if tree.IsConjunction2() {
|
2021-05-12 18:45:43 +02:00
|
|
|
ch <- utils.Min2(values[0], values[1])
|
2021-05-09 20:41:24 +02:00
|
|
|
} else if tree.IsConjunction() {
|
2021-05-12 18:45:43 +02:00
|
|
|
ch <- utils.MinList(values)
|
2021-05-09 20:41:24 +02:00
|
|
|
} else if tree.IsDisjunction2() {
|
2021-05-12 18:45:43 +02:00
|
|
|
ch <- utils.Max2(values[0], values[1])
|
2021-05-09 20:41:24 +02:00
|
|
|
} else if tree.IsDisjunction() {
|
2021-05-12 18:45:43 +02:00
|
|
|
ch <- utils.MaxList(values)
|
2021-05-09 20:41:24 +02:00
|
|
|
} else if tree.IsImplication() {
|
2021-05-12 18:45:43 +02:00
|
|
|
ch <- utils.BoolToInt(values[0] <= values[1])
|
2021-05-09 20:41:24 +02:00
|
|
|
} else {
|
2021-05-12 18:45:43 +02:00
|
|
|
panic("Could not evaluate expression!")
|
2021-05-09 18:22:12 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-05-12 18:45:43 +02:00
|
|
|
func RekursivAtoms(ch chan []string, tree syntaxbaum.SyntaxBaum) {
|
|
|
|
// // Werte für Teilformeln rekursiv berechnen
|
|
|
|
// var values = RekursiveCallStringList(RekursivAtoms, tree.GetChildren())
|
2021-05-09 18:22:12 +02:00
|
|
|
// Herausforderung: schreibe diese Funktion!
|
2021-05-12 18:45:43 +02:00
|
|
|
ch <- []string{}
|
2021-05-09 18:22:12 +02:00
|
|
|
}
|
|
|
|
|
2021-05-12 18:45:43 +02:00
|
|
|
func RekursivDepth(ch chan int, tree syntaxbaum.SyntaxBaum) {
|
|
|
|
// // Werte für Teilformeln rekursiv berechnen
|
|
|
|
// var values = RekursiveCallInt(RekursivDepth, tree.GetChildren())
|
2021-05-09 18:22:12 +02:00
|
|
|
// Herausforderung: schreibe diese Funktion!
|
2021-05-12 18:45:43 +02:00
|
|
|
ch <- 0
|
2021-05-09 18:22:12 +02:00
|
|
|
}
|
|
|
|
|
2021-05-12 18:45:43 +02:00
|
|
|
func RekursivLength(ch chan int, tree syntaxbaum.SyntaxBaum) {
|
|
|
|
// // Werte für Teilformeln rekursiv berechnen
|
|
|
|
// var values = RekursiveCallInt(RekursivLength, tree.GetChildren())
|
2021-05-09 18:22:12 +02:00
|
|
|
// Herausforderung: schreibe diese Funktion!
|
2021-05-12 18:45:43 +02:00
|
|
|
ch <- 0
|
2021-05-09 18:22:12 +02:00
|
|
|
}
|
|
|
|
|
2021-05-12 18:45:43 +02:00
|
|
|
func RekursivParentheses(ch chan int, tree syntaxbaum.SyntaxBaum) {
|
|
|
|
// // Werte für Teilformeln rekursiv berechnen
|
|
|
|
// var values = RekursiveCallInt(RekursivParentheses, tree.GetChildren())
|
2021-05-09 18:22:12 +02:00
|
|
|
// Herausforderung: schreibe diese Funktion!
|
2021-05-12 18:45:43 +02:00
|
|
|
ch <- 0
|
2021-05-09 18:22:12 +02:00
|
|
|
}
|