Diff
Not logged in

Differences From Artifact [56b12828066b590e]:

To Artifact [dc242393e80db0b7]:


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