From c10f194ce4ee191c17e8f7f5ee415a44647690ed Mon Sep 17 00:00:00 2001 From: raj_mathe Date: Wed, 12 May 2021 18:46:37 +0200 Subject: [PATCH] master > master: codego rekursives Aufrufen mit Channels ausgelagert --- .../aussagenlogik/rekursion/rekursion_aux.go | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 codego/aussagenlogik/rekursion/rekursion_aux.go diff --git a/codego/aussagenlogik/rekursion/rekursion_aux.go b/codego/aussagenlogik/rekursion/rekursion_aux.go new file mode 100644 index 0000000..c9f806d --- /dev/null +++ b/codego/aussagenlogik/rekursion/rekursion_aux.go @@ -0,0 +1,51 @@ +package rekursion + +import ( + "logik/aussagenlogik/syntaxbaum" +) + +/* ---------------------------------------------------------------- * + * EXPORTS + * ---------------------------------------------------------------- */ + +func RekursiveCallInt(fn func(ch chan int, tree syntaxbaum.SyntaxBaum), children []syntaxbaum.SyntaxBaum) []int { + subChannel := make(chan int) + values := make([]int, len(children)) + // start parallel computations on subformulae + for _, subtree := range children { + go fn(subChannel, subtree) + } + // successively read values + for i := 0; i < len(children); i++ { + values[i] = <-subChannel + } + return values +} + +func RekursiveCallString(fn func(ch chan string, tree syntaxbaum.SyntaxBaum), children []syntaxbaum.SyntaxBaum) []string { + subChannel := make(chan string) + values := make([]string, len(children)) + // start parallel computations + for _, subtree := range children { + go fn(subChannel, subtree) + } + // successively read values + for i := 0; i < len(children); i++ { + values[i] = <-subChannel + } + return values +} + +func RekursiveCallStringList(fn func(ch chan []string, tree syntaxbaum.SyntaxBaum), children []syntaxbaum.SyntaxBaum) [][]string { + subChannel := make(chan []string) + values := make([][]string, len(children)) + // start parallel computations + for _, subtree := range children { + go fn(subChannel, subtree) + } + // successively read values + for i := 0; i < len(children); i++ { + values[i] = <-subChannel + } + return values +}