高階関数の練習に、mapcar
と filter
を作ってみた。
まずは mapcar
から。
package main import "fmt" func mapcar(f func(int) int, a []int) []int { b := make([]int, 0) for _, x := range a { b = append(b, f(x)) } return b } func square(x int) int { return x * x } func main() { a := []int{ 1,2,3,4,5 } fmt.Println(a) b := mapcar(square, a) fmt.Println(b) cube := func(x int) int { return x * x * x } c := mapcar(cube, a) fmt.Println(c) }
^o^ > go run mapcar.go [1 2 3 4 5] [1 4 9 16 25] [1 8 27 64 125]
つぎは filter
。
package main import "fmt" func filter(f func(int) bool, a []int) []int { b := make([]int, 0) for _, x := range a { if f(x) { b = append(b, x) } } return b } func even(i int) bool { return i % 2 == 0 } func main() { a := []int{ 1,2,3,4,5,6,7,8,9 } b := filter(even, a) fmt.Println(b) }
^o^ > go run filter.go [2 4 6 8]