noopでフィボナッチ数列

whileループが実装されました。
4c84f065ce - noop - Project Hosting on Google Code

まだ比較演算子ができてない状態なので、10回実行されるループ文みたいなのは書けないみたいです。


無限ループとか

while(true){
  ...
}

一度も実行されないループしか書けません。

while(false){
  ...
}

と思ってたら、新しいサンプルが追加されてて、一度だけ実行されるwhileループのサンプルがありました。

Boolean b = true;
while(b){
  console.println("Hello World!");
  b = false;
}

なるほどなー
あれ?そういえば変数はデフォルトでfinalになるんじゃなかったっけ?!その辺はまだ実装されていないのか。

フィボナッチ数列

ループが書けるようになったので、無限ループ上等でフィボナッチ数列を出力するコードを書いてみました。

import noop.Application;
import noop.Console;

class Fibonacci(Console console) implements Application {

  Int main(List args) {
    Int prev = 0;
    Int curr = 1;
    Int next = 1;
    
    while(true){
      console.println(curr);
      next = curr.plus(prev); // 「next = curr + prev;」と同じ
      prev = curr;
      curr = next;
    }
    
    return 0;
  }
  
}


実行結果

target>scala -cp classes;resources;"%HOME%\.m2\repository\org\antlr\antlr\3.1.1\antlr-3.1.1.jar" noop.interpreter.InterpreterMain Fibonacci resources\stdlib resources\helloworld
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
165580141
267914296
433494437
701408733
1134903170
1836311903
-1323752223
512559680
-811192543

おおー

思ったこと

まだ実装途中のようで、できないことがいっぱいあるのだけど、その制約が逆に面白くなってきました。できることが段々増えていくのを見てるのも楽しいです。
「Intクラスにeqメソッドがあればいいのになー」と思い、自分で書いてみようと思ったのだけどよくわからなくなって諦めました。無念です。