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 <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");