master > master: codego - auslagern, erzeugungsmethode verbessert, SyntaxBaum -> Formula
This commit is contained in:
42
codego/aussagenlogik/recursion/recursion_eval.go
Normal file
42
codego/aussagenlogik/recursion/recursion_eval.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package recursion
|
||||
|
||||
import (
|
||||
"logik/aussagenlogik/formulae"
|
||||
"logik/core/utils"
|
||||
)
|
||||
|
||||
/* ---------------------------------------------------------------- *
|
||||
* METHOD: Evaluation of fomulae in models
|
||||
* ---------------------------------------------------------------- */
|
||||
|
||||
func Eval(tree formulae.Formula, I []string) int {
|
||||
// Definiere (parameterisiertes) Schema:
|
||||
var schema = func(_I []string) func(formulae.Formula, []int) int {
|
||||
return func(tree formulae.Formula, prevValues []int) int {
|
||||
if tree.IsAtom() || tree.IsGeneric() {
|
||||
return utils.BoolToInt(utils.StrListContains(_I, tree.GetExpr()))
|
||||
} else if tree.IsTautologySymbol() {
|
||||
return 1
|
||||
} else if tree.IsContradictionSymbol() {
|
||||
return 0
|
||||
} else if tree.IsNegation() {
|
||||
return 1 - prevValues[0]
|
||||
} else if tree.IsConjunction2() {
|
||||
return utils.Min2(prevValues[0], prevValues[1])
|
||||
} else if tree.IsConjunction() {
|
||||
return utils.MinList(prevValues)
|
||||
} else if tree.IsDisjunction2() {
|
||||
return utils.Max2(prevValues[0], prevValues[1])
|
||||
} else if tree.IsDisjunction() {
|
||||
return utils.MaxList(prevValues)
|
||||
} else if tree.IsImplication() {
|
||||
return utils.BoolToInt(prevValues[0] <= prevValues[1])
|
||||
} else {
|
||||
panic("Could not evaluate expression!")
|
||||
}
|
||||
}
|
||||
}
|
||||
// Erzeuge Funktion aus Schema und berechne Wert:
|
||||
fn := formulae.CreateFromSchemeIntValued(schema(I))
|
||||
return fn(tree)
|
||||
}
|
||||
Reference in New Issue
Block a user