diff --git a/functions/first_class/main.go b/functions/first_class/main.go new file mode 100644 index 0000000..5616572 --- /dev/null +++ b/functions/first_class/main.go @@ -0,0 +1,32 @@ +package main + +import "github.com/davecgh/go-spew/spew" + +type Cruncher func(int) int + +func mul(n int) int { + return n * 2 +} + +func add(n int) int { + return n + 100 +} + +func sub(n int) int { + return n - 1 +} + +func crunch(nums []int, a ...Cruncher) (rnums []int) { + rnums = append(rnums, nums...) + for _, f := range a { + for i, n := range rnums { + rnums[i] = f(n) + } + } + return +} + +func main() { + nums := []int{1, 2, 3, 4, 5, 6} + spew.Dump(crunch(nums, mul, add, sub)) +}