info

書籍「7つの言語7つの世界」Io言語やってみる

フィボナッチ数

fib := method(n, 
    if(n < 2, n, fib(n - 1) + fib(n - 2))
)

Io> fib(10)
==> 55

ループ版

fib := method(n,
    fir ::= 0
    sec ::= 1
    tmp ::= 0
    n repeat(
    tmp = sec
    sec = sec + fir
    fir = tmp
   )
fir
)

fib(31) println

分母がゼロの時答えがゼロになるように

Io> 42 type
==> Number

数字はNumberクラスなんだなぁ

んで

Number / := method(n, if(n == 0, 0, self / n))

これでは無限ループになってしまう
割り算のメソッドをコピーすればいいと思いついたまではよかったけど、どうやって取得できるかで詰まった

# div := / これじゃダメ
div := Number getSlot("/")

Number / := method(n, if(n == 0, 0, self div(n)))

未だに引数がいつ評価されるかわからない