Ангел обнови решението на 15.10.2014 17:03 (преди над 3 години)
+package main
+
+func Map(data []string, mapper func(string) string) (result []string) {
+        result = make([]string, len(data))
+        for index, value := range data {
+                result[index] = mapper(value)
+        }
+        return
+}
+
+func Filter(data []string, predicate func(string) bool) (result []string) {
+        result = make([]string, 0)
+        for _, value := range data {
+                if predicate(value) {
+                        result = append(result, value)
+                }
+        }
+        return
+}
+
+func Reduce(data []string, combinator func(string, string) string) (result string) {
+        for _, value := range data {
+                result = combinator(result, value)
+        }
+        return
+}
+
+func Any(data []string, predicate func(string) bool) bool {
+        for _, value := range data {
+                if predicate(value) {
+                        return true
+                }
+        }
+        return false
+}
+
+func All(data []string, predicate func(string) bool) bool {
+        for _, value := range data {
+                if !predicate(value) {
+                        return false
+                }
+        }
+        return true
+}
Супер. Много добро решение.
Единствено мога да се заям за result = make([]string, 0). Изпълнява изискванията напълно, но дай да помислим дали има начин, каквото и да се подаде на Filter, никога да не се налага на Go да преоразмерява масива под result :)
