Differences From Artifact [56b12828066b590e]:
- File
doc/index.html
- 2010-11-26 05:03:10 - part of checkin [207cea338a] on branch trunk - changed hiding mechanizem of x in let x = ... for @macro layer. Old: set(x,ValueLayer,undefined) Nee: set(x,NoopLayer,null) (user: kinaba) [annotate]
To Artifact [dc242393e80db0b7]:
- File
doc/index.html
- 2010-11-26 07:42:38 - part of checkin [f7e9e77316] on branch trunk - introduced "..." expression, and replaced the pattern match failure with this. (user: kinaba) [annotate]
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");