master > master: codego Anwendung von Go's "channels" für Rekursion
This commit is contained in:
parent
5e89d57dad
commit
8dcf781b96
@ -1,7 +1,6 @@
|
||||
package rekursion
|
||||
|
||||
import (
|
||||
"log"
|
||||
"logik/aussagenlogik/syntaxbaum"
|
||||
"logik/core/utils"
|
||||
)
|
||||
@ -10,72 +9,62 @@ import (
|
||||
* EXPORTS
|
||||
* ---------------------------------------------------------------- */
|
||||
|
||||
func RekursivEval(tree syntaxbaum.SyntaxBaum, I []string) int {
|
||||
var children = tree.GetChildren()
|
||||
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
|
||||
if tree.IsAtom() || tree.IsGeneric() {
|
||||
if utils.StrListContains(I, tree.Expr) {
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
ch <- utils.BoolToInt(utils.StrListContains(I, tree.GetExpr()))
|
||||
} else if tree.IsTautologySymbol() {
|
||||
return 1
|
||||
ch <- 1
|
||||
} else if tree.IsContradictionSymbol() {
|
||||
return 0
|
||||
ch <- 0
|
||||
} else if tree.IsNegation() {
|
||||
subtree0, _ := tree.GetChild()
|
||||
val0 := RekursivEval(subtree0, I)
|
||||
return 1 - val0
|
||||
ch <- 1 - values[0]
|
||||
} else if tree.IsConjunction2() {
|
||||
val0 := RekursivEval(children[0], I)
|
||||
val1 := RekursivEval(children[1], I)
|
||||
return utils.Min2(val0, val1)
|
||||
ch <- utils.Min2(values[0], values[1])
|
||||
} else if tree.IsConjunction() {
|
||||
var val = 1
|
||||
for _, subtree := range children {
|
||||
var val_ = RekursivEval(subtree, I)
|
||||
val = utils.Min2(val, val_)
|
||||
}
|
||||
return val
|
||||
ch <- utils.MinList(values)
|
||||
} else if tree.IsDisjunction2() {
|
||||
val0 := RekursivEval(children[0], I)
|
||||
val1 := RekursivEval(children[1], I)
|
||||
return utils.Max2(val0, val1)
|
||||
ch <- utils.Max2(values[0], values[1])
|
||||
} else if tree.IsDisjunction() {
|
||||
var val = 0
|
||||
for _, subtree := range children {
|
||||
var val_ = RekursivEval(subtree, I)
|
||||
val = utils.Max2(val, val_)
|
||||
}
|
||||
return val
|
||||
ch <- utils.MaxList(values)
|
||||
} else if tree.IsImplication() {
|
||||
val0 := RekursivEval(children[0], I)
|
||||
val1 := RekursivEval(children[1], I)
|
||||
if val0 <= val1 {
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
ch <- utils.BoolToInt(values[0] <= values[1])
|
||||
} else {
|
||||
log.Fatal("Could not evaluate expression!")
|
||||
return 0
|
||||
panic("Could not evaluate expression!")
|
||||
}
|
||||
}
|
||||
|
||||
func RekursivAtoms(tree syntaxbaum.SyntaxBaum) []string {
|
||||
func RekursivAtoms(ch chan []string, tree syntaxbaum.SyntaxBaum) {
|
||||
// // Werte für Teilformeln rekursiv berechnen
|
||||
// var values = RekursiveCallStringList(RekursivAtoms, tree.GetChildren())
|
||||
// Herausforderung: schreibe diese Funktion!
|
||||
return []string{}
|
||||
ch <- []string{}
|
||||
}
|
||||
|
||||
func RekursivDepth(tree syntaxbaum.SyntaxBaum) int {
|
||||
func RekursivDepth(ch chan int, tree syntaxbaum.SyntaxBaum) {
|
||||
// // Werte für Teilformeln rekursiv berechnen
|
||||
// var values = RekursiveCallInt(RekursivDepth, tree.GetChildren())
|
||||
// Herausforderung: schreibe diese Funktion!
|
||||
return 0
|
||||
ch <- 0
|
||||
}
|
||||
|
||||
func RekursivLength(tree syntaxbaum.SyntaxBaum) int {
|
||||
func RekursivLength(ch chan int, tree syntaxbaum.SyntaxBaum) {
|
||||
// // Werte für Teilformeln rekursiv berechnen
|
||||
// var values = RekursiveCallInt(RekursivLength, tree.GetChildren())
|
||||
// Herausforderung: schreibe diese Funktion!
|
||||
return 0
|
||||
ch <- 0
|
||||
}
|
||||
|
||||
func RekursivParentheses(tree syntaxbaum.SyntaxBaum) int {
|
||||
func RekursivParentheses(ch chan int, tree syntaxbaum.SyntaxBaum) {
|
||||
// // Werte für Teilformeln rekursiv berechnen
|
||||
// var values = RekursiveCallInt(RekursivParentheses, tree.GetChildren())
|
||||
// Herausforderung: schreibe diese Funktion!
|
||||
return 0
|
||||
ch <- 0
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user