表紙 編集 差分 一覧 最近 短縮 付箋 ログイン 凍結中

fix

fix

package main
import "fmt"

type unaryFunc func (int) int;

func fibMaker(f unaryFunc) unaryFunc {
    return func (x int) int {
        if x <= 1 {
            return 1
        }
        return f(x-1) + f(x-2);
    };
}

func fix(g func (unaryFunc) unaryFunc) unaryFunc {
    return g(func(x int) int { return fix(g)(x) });
}

func main() {
    fib := fix(fibMaker);
    for i := 1; i < 6; i++ {
        fmt.Println(fib(i));
    }
}