Haxe 3 で単純な相互再帰関数を書こうとしていますが、コードをコンパイルできませんでした。これは、最初に表示される相互関数のいずれかが、グループ内の他の関数が未定義であると報告するためです。相互に定義された関数odd
とeven
を使用してパリティを決定する最小限の例を以下に示します。
static public function test(n:Int):Bool {
var a:Int;
if (n >= 0) a = n; else a = -n;
function even(x:Int):Bool {
if (x == 0)
return true;
else
return odd(x - 1);
}
function odd(x:Int):Bool {
if (x == 0)
return false;
else
return even(x - 1);
}
return even(a);
}
neko にコンパイルしようとすると、次のようになります。
../test.hx:715: characters 11-14 : Unknown identifier : odd
Uncaught exception - load.c(181) : Module not found : main.n
c/c++ で行うようにodd
beforeの前方宣言をしようとしましたが、haxe3 では違法のようです。even
上記のような相互再帰関数をどのように定義できますか? それはまったく可能ですか?
注:グローバルに表示される function でラップされたローカル関数odd
との両方を持ちたいと思いました。even
test
ありがとう、