Diff
Not logged in

Differences From Artifact [56b12828066b590e]:

To Artifact [dc242393e80db0b7]:


89 89 90 90 <dd><pre> 91 91 ID ::= 適当に識別子っぽい文字列 92 92 LAYER ::= "@" ID 93 93 94 94 E ::= 95 95 <font color=green># 変数宣言</font> 96 - | ("var"|"let"|"def"|LAYER) ID "=" E (";"|"in") E 97 - | ("var"|"let"|"def"|LAYER) ID "(" PARAMS ")" "{" E "}" (";"|"in") E 98 - | ("var"|"let"|"def"|LAYER) ID "=" E 99 - | ("var"|"let"|"def"|LAYER) ID "(" PARAMS ")" "{" E "}" 96 + | DECL "=" E (";"|"in") E 97 + | DECL "(" PARAMS ")" "{" E "}" (";"|"in") E 98 + | DECL "=" E 99 + | DECL "(" PARAMS ")" "{" E "}" 100 + 101 + where DECL ::= ("var"|"let"|"def"|LAYER) ID | "@" LAYER 100 102 101 103 <font color=green># リテラル</font> 102 104 | INTEGER <font color=green># 非負整数</font> 103 105 | STRING <font color=green># "" でくくった文字列。\" と \\ は使える</font> 104 106 | "{" ENTRYS "}" <font color=green># テーブル</font> 105 107 | "fun" "(" PARAMS ")" "{" E "}" <font color=green># 無名関数</font> 106 108 | "λ" "(" PARAMS ")" "{" E "}" <font color=green># 無名関数</font> ................................................................................ 110 112 111 113 where ARGS ::= E "," ... "," E 112 114 PARAMS ::= (ID|LAYER)+ "," ... "," (ID|LAYER)+ 113 115 ENTRYS ::= ID ":" E "," ... "," ID ":" E 114 116 115 117 <font color=green># 演算子など</font> 116 118 | "(" E ")" <font color=green># ただの括弧</font> 119 + | "..." <font color=green># これを実行するとdie</font> 117 120 | E BINOP E <font color=green># 二項演算子いろいろ</font> 118 121 | E "." ID <font color=green># テーブルのフィールドアクセス</font> 119 122 | E ".?" ID <font color=green># テーブルにフィールドがあるか否か</font> 120 123 | E "{" ENTRYS "}" <font color=green># テーブル拡張</font> 121 124 | "if" E ("then"|":"|"then" ":") E 122 125 | "if" E ("then"|":"|"then" ":") E "else" ":"? E 123 126 ................................................................................ 285 288 以下のデータ型があります。 286 289 </p> 287 290 <ul> 288 291 <li>整数: <tt>0</tt>, <tt>123</tt>, <tt>456666666666666666666666666666666666666789</tt>, ...</li> 289 292 <li>文字列: <tt>"hello, world!"</tt>, ...</li> 290 293 <li>関数: <tt>fun(x){x+1}</tt></li> 291 294 <li>テーブル: <tt>{car: 1, cdr: {car: 2, cdr: {}}}</tt></li> 292 - <li>未定義値: (undefined。特殊なケースで作られます)</li> 295 + <li>未定義値: (特殊なケースで作られます。「レイヤ」の説明参照のこと。)</li> 293 296 </ul> 294 297 <p> 295 298 関数はいわゆる「クロージャ」です。静的スコープで外側の環境にアクセスできます。 296 299 テーブルはいわゆるプロトタイプチェーンを持っていて、 297 300 自分にないフィールドの場合は親に問い合わせが行く感じになっていますが、 298 301 フィールドの書き換えがないので、これは特に意味ないかもしれない…。 299 302 </p> ................................................................................ 325 328 when {car:x, cdr:{}}: lst 326 329 when {}: {} 327 330 } 328 331 </pre> 329 332 <p> 330 333 動かすときには、処理系がそれっぽい if-then-else に展開しています。 331 334 <tt>when</tt> を上から試していって、最初にマッチしたところを実行します。 335 +どれにもマッチしないとエラーでプログラム終了します。 332 336 </p> 333 337 <pre> 334 338 PAT ::= "_" <font color=green># ワイルドカード</font> 335 339 | ID <font color=green># 変数パターン</font> 336 340 | "{" ID ":" PAT "," ... "," ID : PAT "}" <font color=green># テーブルパターン</font> 337 341 | E <font color=green># 値パターン</font> 338 342 </pre> ................................................................................ 873 877 <script>explorer.outline.decSymbolLevel();</script> 874 878 875 879 876 880 </td></tr> 877 881 <tr><td id="docfooter"> 878 882 Page was generated with 879 883 <img src="candydoc/img/candydoc.gif" style="vertical-align:middle; position:relative; top:-1px"> 880 - on Fri Nov 26 10:02:52 2010 884 + on Fri Nov 26 16:41:52 2010 881 885 882 886 </td></tr> 883 887 </table> 884 888 </div> 885 889 <script> 886 890 explorer.packageExplorer.addModule("index"); 887 891 explorer.packageExplorer.addModule("main");