52 lines
1.4 KiB
Go
52 lines
1.4 KiB
Go
|
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
|
||
|
}
|