Иво обнови решението на 20.10.2018 16:40 (преди 10 месеца)
+package main
+
+import "fmt"
+
+func MapReducer(mapper func(int) int, reducer func(int, int) int, initial int) func(...int) int {
+
+ return func(args ...int) int {
+
+ var result int = 0
+
+ for _, v := range args {
+
+ result += mapper(reducer(initial, v))
Какво ще стане ако reducer-а е нещо различно от събиране?
+ }
+
+ return result
+ }
+}
+
+func Generator(gen func(int) int, initial int) func() int {
+
+ var begin bool = false
+
+ return func() int {
+
+ if !begin {
+
+ begin = true
+ return initial
+ }
+
+ initial = gen(initial)
+
+ return initial
+ }
+}
+
+func Repeater(s, sep string) func(int) string {
+
+ return func(repetition int) string {
+
+ var result string
+
+ for i := 0; i < repetition; i++ {
+
+ if i == repetition-1 {
+
+ result += s
+ break
+ }
+
+ result += s + sep
+ }
+
+ return result
+ }
+}
+
+func main() {
+
+ fmt.Printf("%s", Repeater("foobar", ":")(5))
+
+ counter := Generator(func (v int) int {return v + 1}, 0)
+ power := Generator(func (v int) int {return v * v}, 3)
+ fmt.Printf("Values: %d, %d, %d, %d", counter(), counter(), power(), power())
+
+ powerSum := MapReducer(func(v int) int { return v * v }, func(a, v int) int { return a + v }, 0)
+ fmt.Printf("Value is: %d", powerSum(1, 2, 3, 4))
+}
Няма нужда да предаваш main
функция -- моля да я изтриеш цялата.
Лесен начин да си тестваш решението е да я сложиш в друг go
файл, след което да ползваш go run .
за да стартираш програмата си.