Functions mess (recursive anonymous function) in Golang
Example
package main
import (
"fmt"
"reflect"
)
type Num interface{}
type List func(...Num) Num
func (list List) Apply(a Num) List {
return func(values ...Num) Num {
values = append([]Num{a}, values...)
return list(values...)
}
}
func wrapper(fn Num) List {
return func(a ...Num) Num{
return caller(fn, a)
}
}
func caller(fn Num, args []Num) Num {
var vs []reflect.Value
for _, arg := range args {
vs = append(vs, reflect.ValueOf(arg))
}
fun := reflect.ValueOf(fn)
return fun.Call(vs)[0].Interface()
}
func mixture(elems []Num, fn Num) List {
var list List = wrapper(fn)
for _, elem := range elems {
list = list.Apply(elem)
}
return list
}
func addition(l int, m int, n int, o int) int {
return l * m + n * o
}
func main() {
fmt.Println(mixture([]Num{1, 2, 3}, addition)(4)) //14
fmt.Println(mixture([]Num{1, 2, 3, 4}, addition)()) //14
}
Output
14
14
Most Helpful This Week
How to use array in Go Programming Language?
Example: Fields and FieldsFunc from BYTES Package
How to check UPPERCASE characters in a string in Golang?
Different ways for Integer to String Conversions
How to find length of Map in Go?
Example to create custom error
How to import and alias package names?
Example to compare Println vs Printf
How to append text to a file in Golang?
How to fix race condition using Atomic Functions in Golang?