update: advanced funcs
This commit is contained in:
@ -7,7 +7,11 @@
|
|||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import "fmt"
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
"unicode"
|
||||||
|
)
|
||||||
|
|
||||||
type filterFunc func(int) bool
|
type filterFunc func(int) bool
|
||||||
|
|
||||||
@ -23,6 +27,17 @@ func main() {
|
|||||||
fmt.Println("\n••• FUNC VALUES •••")
|
fmt.Println("\n••• FUNC VALUES •••")
|
||||||
fmt.Printf("evens : %d\n", filter(isEven, nums...))
|
fmt.Printf("evens : %d\n", filter(isEven, nums...))
|
||||||
fmt.Printf("odds : %d\n", filter(isOdd, nums...))
|
fmt.Printf("odds : %d\n", filter(isOdd, nums...))
|
||||||
|
|
||||||
|
fmt.Println("\n••• MAPPING •••")
|
||||||
|
fmt.Println(strings.Map(unpunct, "hello!!! HOW ARE YOU???? :))"))
|
||||||
|
fmt.Println(strings.Map(unpunct, "TIME IS UP!"))
|
||||||
|
}
|
||||||
|
|
||||||
|
func unpunct(r rune) rune {
|
||||||
|
if unicode.IsPunct(r) {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
return unicode.ToLower(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
func filter(f filterFunc, nums ...int) (filtered []int) {
|
func filter(f filterFunc, nums ...int) (filtered []int) {
|
||||||
@ -33,6 +48,7 @@ func filter(f filterFunc, nums ...int) (filtered []int) {
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func filterOdds(nums ...int) (filtered []int) {
|
func filterOdds(nums ...int) (filtered []int) {
|
||||||
for _, n := range nums {
|
for _, n := range nums {
|
||||||
if isOdd(n) {
|
if isOdd(n) {
|
@ -22,7 +22,7 @@ func main() {
|
|||||||
|
|
||||||
// ========================================================================
|
// ========================================================================
|
||||||
|
|
||||||
fmt.Println("\n••• FUNC LITERALS •••")
|
fmt.Println("\n••• CLOSURES •••")
|
||||||
|
|
||||||
var min int
|
var min int
|
||||||
greaterThan := func(n int) bool {
|
greaterThan := func(n int) bool {
|
||||||
@ -35,16 +35,29 @@ func main() {
|
|||||||
min = 6
|
min = 6
|
||||||
fmt.Printf("> 6 : %d\n", filter(greaterThan, nums...))
|
fmt.Printf("> 6 : %d\n", filter(greaterThan, nums...))
|
||||||
|
|
||||||
// ========================================================================
|
// min = 1
|
||||||
|
// fmt.Printf("> 1 : %d\n", filter(greaterThan, nums...))
|
||||||
|
// min = 2
|
||||||
|
// fmt.Printf("> 2 : %d\n", filter(greaterThan, nums...))
|
||||||
|
// min = 3
|
||||||
|
// fmt.Printf("> 3 : %d\n", filter(greaterThan, nums...))
|
||||||
|
|
||||||
fmt.Println("\n••• HIGHER-ORDER FUNCS •••")
|
var filterers []filterFunc
|
||||||
fmt.Printf("> 3 : %d\n", filter(greater(3), nums...))
|
for i := 1; i <= 3; i++ {
|
||||||
fmt.Printf("> 6 : %d\n", filter(greater(6), nums...))
|
current := i
|
||||||
|
|
||||||
|
filterers = append(filterers, func(n int) bool {
|
||||||
|
min = current
|
||||||
|
return greaterThan(n)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func greater(min int) filterFunc {
|
printer(filterers, nums...)
|
||||||
return func(n int) bool {
|
}
|
||||||
return n > min
|
|
||||||
|
func printer(filterers []filterFunc, nums ...int) {
|
||||||
|
for i, filterer := range filterers {
|
||||||
|
fmt.Printf("> %d : %d\n", i+1, filter(filterer, nums...))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -40,7 +40,7 @@ func main() {
|
|||||||
fmt.Printf("dups uniqs : %v\n", filter(uniques(), out...))
|
fmt.Printf("dups uniqs : %v\n", filter(uniques(), out...))
|
||||||
|
|
||||||
dups = reverse(uniques())
|
dups = reverse(uniques())
|
||||||
chained := chain(reverse(greater(2)), dups, uniques())
|
chained := chain(reverse(greater(1)), dups, uniques())
|
||||||
fmt.Printf("dups chain : %v\n", filter(chained, 1, 1, 2, 3, 3, 3, 3, 0, 0))
|
fmt.Printf("dups chain : %v\n", filter(chained, 1, 1, 2, 3, 3, 3, 3, 0, 0))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,6 +78,12 @@ func greater(min int) filterFunc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func lesseq(max int) filterFunc {
|
||||||
|
return func(n int) bool {
|
||||||
|
return n <= max
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func filter(f filterFunc, nums ...int) (filtered []int) {
|
func filter(f filterFunc, nums ...int) (filtered []int) {
|
||||||
for _, n := range nums {
|
for _, n := range nums {
|
||||||
if f(n) {
|
if f(n) {
|
||||||
@ -89,9 +95,3 @@ func filter(f filterFunc, nums ...int) (filtered []int) {
|
|||||||
|
|
||||||
func isEven(n int) bool { return n%2 == 0 }
|
func isEven(n int) bool { return n%2 == 0 }
|
||||||
func isOdd(m int) bool { return m%2 == 1 }
|
func isOdd(m int) bool { return m%2 == 1 }
|
||||||
|
|
||||||
func lesseq(max int) filterFunc {
|
|
||||||
return func(n int) bool {
|
|
||||||
return n <= max
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user