-1

フィボナッチ数列を含む Io 問題に取り組んでいます。数値がフィボナッチ数かどうかをテストするメソッドを作成しようとしています。IsAFib メソッドが機能しない理由がわかりません。その理由と修正方法を知っている人はいますか? 私は Io もプログラミングもまったく初めてなので、変更の理由を説明していただければ幸いです。何と書くべきかだけでなく、何を変える必要があるのか​​知りたいです。

            OperatorTable addOperator("xor", 11)
            true xor := method(bool, if(bool, false, true))
            false xor := method(bool, if(bool, true, false)) 

            doFile("isASquare.io");

次に isASquare.io ファイル:

            isASquare := method(n,                    
                    for(i, 1, n, 
                        if(i * i == n, return true)
                        if(i * i > n, return false)
                    )
            )

            isAFib := method(n,
                    if(isASquare(2 ** 5 * n) xor isASquare(2 ** n * 5 - 4), return true, return false)
            )
4

1 に答える 1

2

そのため、これは時々発生する問題です。動的演算子の動作方法は、vm がソース ファイルをロードするとき、それを評価する前に、演算子を囲むルールを適用することです。最初の実行時、io は組み込みの演算子しか知りません。このメッセージの並べ替えが完了すると、ファイル内のコードの評価を開始します。つまり、この行を最初に評価します。

OperatorTable addOperator("xor", 11)

このコードが実行されるまでには、このファイルに影響を与えるには遅すぎます。

コミュニティ内の一般的なコンセンサスは、最初にロードするファイルにすべてのオペレータを配置し、そのファイルの最後に、doFile()それらを使用するメイン ファイルをロードするか、同様にロードすることです。

ちょっと面倒ですが、Io には従来のコンパイル時間はありません。

于 2013-03-29T15:26:20.130 に答える