declarations全ての変数やプロシージャは、使う時点で宣言されている必要がある。(というのも、Nimと同じくらい広くメタプログラミングが使えるプログラミング言語では同程度以上の事が必要になるのである)42しかし、相互再帰なプロシージャを使う場合、このルールに従うことが出来ない。odd(n-1)コード例では、oddはevenに依存し、逆もまたしかりである。したがって、evenを完全に定義する前であっても、コンパイラにevenの存在を知らせる必要があるのだ。そのための構文は簡単であり、=とプロシージャの中身を省略するだけでいい。assertは境界条件を与えているに過ぎず、モジュールの項で触れる。今後のNimのバージョンにおいては、前方宣言に要求されるものが減らされる。コード例から分かるもう一つの事として、プロシージャの中身は単一の式だけでも十分だという事だ。この場合、式の値が暗黙に返り値とされる。RammsteinのMorgensternという歌からの引用。引用意図はぶっちゃけよく分からない。checks"である。checkが良く分かっていないため、変な訳になっているかもしれない。imported"とwhichの制限用法で記述されているが、リンクに飛ぶ限り、システムモジュールは単一のモジュールであり、非制限用法的に訳している。いうかこの著者、ちょいちょいコンマが足りない。原文では「バックスラッシュ」で書かれている。templates"とあるが、templatesの指す意味が今一つ掴めなかった。フレームワーク的な意味じゃあるまいし。tree"とのみあるが、通常のコメントと比較した文脈であると考えて、「抽象」を補った。file"とあるが、コメントの記述という文脈から、".nim"ファイルの事だと解釈した。file"を含んでいるのかもしれない。原文通りのリンクを貼っているが、こちらのほうが、適切に思える。↩2原文でもyes(""])の記述がある。マニュアルを読む限り、このようなプロシージャは存在しないが、「ユーザーが定義したプロシージャyes()」をコメントアウトした、という文脈と考えて、訳した。実際、後でyes()というプロシージャが定義されている。↩ideoneと手元の実行環境で確認したが、10_0000_0000という日本風の表記も可能である。西洋かぶれの3桁区切りが嫌いな方は是非。小数点.やeを含む数字は浮動小数点型になる。(10億:1.0e9)16進数は0x、2進数は0b、8進数は0oがそれぞれ先頭に付く。先頭に0を付けたとしても、8進数には出来ない。3という表記(つまり、同時に宣言し、別々の変数を代入)は出来ないようである。indentationと出てきた。原文では、修飾関係が入り組んでいる。procedure"は"variables"にかかっていると考えているが、訳中ではそこをぼかしている。procedure"するのは、「変数」などではなく「値」であるように思えて仕方ないからである。呼ばれた回数を返すプロシージャとか。コンパイルするときに、宣言・代入文は解きほぐされ、結果としてプロシージャを複数回呼び出すことになるからだ。返り値が副作用にプロシージャに左右される物であれば、変数に別の値が入ってしまうかもしれない。まとめて代入する時は、この点に気を付けよう。value"が厄介なため、まるっと意訳した。後述のconstで宣言される定数とは違うだろうし、「定数値」という訳が適切とも思えない。原文では"symbol"となっている。シンボルの定義があいまいに思えるため、「識別子」とした。訳としては離れるが、意味としては遠くないはずだ。定数の値は変えられない。コンパイラは、コンパイルの間に定数宣言中の式を計算しておく必要がある。↩これはコンパイルの開発者に向けて書かれていると考える。いうのも、Nimはいまだにver1.0に到達しておらず、(憶測ではあるが)コンパイル開発者もコミュニティに多くいるはずだからである。いえ、これが何を意味するかは明白である。.nim上では定数にプロシージャ経由で値を与えていても、.exe上ではその返り値がもう計算され、代入されているのである。元となった言語はよく分からないが、よくあるswitch-caseに比べて英語の文法としては自然に見える。プログラムを分岐させるもう一つの方法はcase文を使う。case文は複数に分岐できる。↩breakがないのは、コンマ区切りが使えるからであろう。↩ideoneのバージョンが古く(0.11.2)、何かと色々があると考えられる。インストールした環境(0.15.2)では問題なく動く。ideoneのコードでは$iを()で挟んだ。見た限り動作、出力に違いはない。↩4これは手元の実行環境では問題なく動く。いうのも、このコードは無限ループで繰り返し入力を求めるコードであるからだ。stdinから有限個のinputしか受け付けないideoneがランタイムエラーを吐くのは仕方ないと言える。xの後にbreakを挿入する事などで回避できるが、挙動は変わる。こちらでは、try-exceptを使っており、おそらく挙動としては最も近い。↩どうやらideoneはlinuxを使っているようだ。statement"と書かれている。statement"「単純」の間に"assignment"が割り込んでいると考えられない訳ではない。これを「一つの」と訳したのは、3つ目のコメントと比較してである。↩xもyも宣言されてないんだから、しょうがない。しても確認して安心したい方はこちら。↩この文を読む限り、Nimにはメソッド・プロシージャ・関数の間に厳密な区別を設けようと考えてはなさそうだ。この中の日本語訳は「プロシージャ」で統一したが、別の意見があればコメントで勝手に討論してほしい。原文では"formal"となっているため「正式な」と訳したが、意味合いとしては「狭義の」と同じであると私は考えている。=の部分が宣言に相当している。typeにどのデータ型を割り当てるかによって、resultの型も変わる。=を抜かすと「resultが宣言されていない」という趣旨のエラーが返ってくる。原文では"shadow"とのみあるが、「本来のresult変数が持つ機能を失う事を意味する」と補った。これは具体的なコード例を見る限り、"shadow"はかなり強めの意味を持つからである。初期値をイジれそうな方法はいくつか思いつく。initial_valueと宣言文で初期化する、パラメータ名をresultにするの3つである。どれが上手くいくかは、実際に確かめてみてほしい。他にうまくいった方法があれば、知らせてほしい。↩ここでは関数の宣言のみをしている。2)などと打ち込むとよいだろう。↩マニュアルを読む限り、セミコロン;は単に見やすさの問題らしい。caller"の訳がよく分かっていない。文脈から察するに、「プロシージャ内に止まらず、呼び出し先にも変更が影響している」という意味だと判断したが、"visible"という単語のすわりが悪い。「見えている=変化を知っている=伝わっている」と考えて訳したが、「スコープ的な意味で見える」「プロシージャ宣言文を見なくても呼び出し先を見るだけで、プログラマにはどの変数が変えられたかが見て取れる」という解釈が無理とは思えない。statement副作用として返り値を持つプロシージャを呼び出しつつ、その返り値を無視するには、discard文が絶対に必要である。↩Window型が定義されていないため、致し方ない。domというライブラリの中に、Window型がある。調べてみたが、javascriptプラットフォームを使うくらいしか分からなかった。createWindow.nimを実行するとエラーなく実行できたが非常に長いファイルで、読む気が失せたため、Gistで共有しておく。いうより、私のような初心者プログラマにわかるわけない。↩2エラーを回避するため、createWindowプロシージャの型は整数型にしてある。↩リンク先では...をdiscardと置き換えたが、つまらないため、ローマ数字に置き換えるコードも書いてみた。綺麗なコードではないので、参考にしない事。(アドバイスください)言うまでもないが、$にローマ数字に置き換える機能などない。proc"となっている。proc"と取り、「まさに」と訳した。an"が微妙なので、誤訳の可能性は非常に高い。suffer."となっている。これはスペース区切りでないため、@!?+~は一つの長い演算子と考える事が出来る。suffer"も、この演算子を使う事を指しており、ユーザー定義の演算子について書いているわけではないと解釈した。~といったよく使われる演算子をポンポン使うと可読性が低くなるぞ」という文章と取れなくもなくなる。私のWindowsPCの日本語キーボードではSHIFT+@で打ち込める。英語キーボードの場合、1の左にあることが多い。objectを先頭に書き加えている。本当にどうでもいいことだが、Nimで真偽の真を意味するのはtrueではなく、Trueである。↩この文章は文法が入り組んでいるので、少し解説しておく。does."となっている。B."(Aである理由は、Bである)である。does"が対応する。D"(DすることはCだ)である。F"(=Fにおいては、Eよりも良くする)となる。ここで「良くする」というのは"better"を訳したものであるが、betterの意味はかなり広く、この文においては「より丁寧に・より十分に」くらいが当てはまるだろう。does"は「Nimと同じくらい広く、メタプログラミングを支援している」と直訳できる。あとは、この論理をまとめれば良いが、分かりにくいため意訳している。recursion"と書かれているが、適切な訳が見つからなかった。nが間違って負数になり、そのまま無限ループに陥ることを心配していると考えて、訳した。