> と、ここまで書いて、実際に動作するプログラムかどうか試そうとしたら、
> 文法エラーになっちゃいました。
実装をちらっと見たら、すぐ原因が分かりました。
最新版である crowbar 0.3 ではなくて、crowbar 0.1.01 を使っていた
のが原因でした。(大汗;;;)
大変失礼しました。
http://kmaebashi.com/programmer/devlang/index.html
のページに、最新版への配布ページへのリンクがあると、
多少はこういう間違いが減るかもしれません…
で、コンパイルしてみると、
1. 単項の「!」演算子がない。(これは欲しいです)
2. C言語の「,」演算子がないので、for 文の3番目の項の
「i.next(), j.next()」でエラー
3. closure() への代入文で「;」を忘れていた
といった問題がありました。
直してみたものが以下の通りなんですが、
実行すると
33:面面面面民藥算劼boolean型には使えません。
となります。これはなぜでしょうね。
function ArrayIterator(anArray) {
this = new_object();
this.theArray = anArray;
this.index = 0;
this.first = closure() { this.index = 0; };
this.next = closure() { this.index = this.index++; };
this.isDone = closure() { return this.index >= this.theArray.size(); };
this.currentItem = closure() { return this.theArray[this.index]; };
return this;
}
function compare(i, j) {
while (i.isDone() == false && j.isDone() == false) {
if (i.currentItem() < j.currentItem()) {
return -1;
}
if (i.currentItem() > j.currentItem()) {
return 1;
}
i.next(); j.next();
}
if (i.isDone() && j.isdone()) {
return 0;
}
if (i.isDone()) {
return -1;
} else {
return 1;
}
}
a = {1, 2, 3, 4, 5, 6, 7, 8};
for (i = ArrayIterator(a); i.isDone() == false; i.next()) {
print("" + i.currentItem(), " ");
}
print("\n");