Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
41
Task/Y-combinator/Go/y-combinator-1.go
Normal file
41
Task/Y-combinator/Go/y-combinator-1.go
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
type Func func(int) int
|
||||
type FuncFunc func(Func) Func
|
||||
type RecursiveFunc func (RecursiveFunc) Func
|
||||
|
||||
func main() {
|
||||
fac := Y(almost_fac)
|
||||
fib := Y(almost_fib)
|
||||
fmt.Println("fac(10) = ", fac(10))
|
||||
fmt.Println("fib(10) = ", fib(10))
|
||||
}
|
||||
|
||||
func Y(f FuncFunc) Func {
|
||||
g := func(r RecursiveFunc) Func {
|
||||
return f(func(x int) int {
|
||||
return r(r)(x)
|
||||
})
|
||||
}
|
||||
return g(g)
|
||||
}
|
||||
|
||||
func almost_fac(f Func) Func {
|
||||
return func(x int) int {
|
||||
if x <= 1 {
|
||||
return 1
|
||||
}
|
||||
return x * f(x-1)
|
||||
}
|
||||
}
|
||||
|
||||
func almost_fib(f Func) Func {
|
||||
return func(x int) int {
|
||||
if x <= 2 {
|
||||
return 1
|
||||
}
|
||||
return f(x-1)+f(x-2)
|
||||
}
|
||||
}
|
||||
5
Task/Y-combinator/Go/y-combinator-2.go
Normal file
5
Task/Y-combinator/Go/y-combinator-2.go
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
func Y(f FuncFunc) Func {
|
||||
return func(x int) int {
|
||||
return f(Y(f))(x)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue