Diff
Not logged in

Differences From Artifact [07bae30af3901ecf]:

To Artifact [b4c241e12eddc95c]:


199 以下のデータ型があります。 199 以下のデータ型があります。 200 </p> 200 </p> 201 <ul> 201 <ul> 202 <li>整数: <tt>0</tt>, <tt>123</tt>, <tt>456666666666666666666666666666666666 202 <li>整数: <tt>0</tt>, <tt>123</tt>, <tt>456666666666666666666666666666666666 203 <li>文字列: <tt>"hello, world!"</tt>, ...</li> 203 <li>文字列: <tt>"hello, world!"</tt>, ...</li> 204 <li>関数: <tt>fun(x){x+1}</tt></li> 204 <li>関数: <tt>fun(x){x+1}</tt></li> 205 <li>テーブル: <tt>{car: 1, cdr: {car: 2, cdr: {}}}</tt></li> 205 <li>テーブル: <tt>{car: 1, cdr: {car: 2, cdr: {}}}</tt></li> 206 <li>未定義値: (テーブルの、存在しないフィールドにアクセたりすると作れます)</li> | 206 <li>未定義値: (undefined。特殊なケー作られます)</li> 207 </ul> 207 </ul> 208 <p> 208 <p> 209 関数はいわゆる「クロージャ」です。静的スコープで外側の環境にアクセスできます。 209 関数はいわゆる「クロージャ」です。静的スコープで外側の環境にアクセスできます。 210 テーブルはいわゆるプロトタイプチェーンを持っていて、 210 テーブルはいわゆるプロトタイプチェーンを持っていて、 211 自分にないフィールドの場合は親に問い合わせが行く感じになっていますが、 211 自分にないフィールドの場合は親に問い合わせが行く感じになっていますが、 212 フィールドの書き換えがないので、これは特に意味ないかもしれない…。 212 フィールドの書き換えがないので、これは特に意味ないかもしれない…。 213 </p> 213 </p> > 214 <p> > 215 また、リストを扱うために、いわゆる「cons リスト」を使います。 > 216 空リストを <tt>{}</tt>、1個以上要素があるものを <tt>{car: 先頭要素, cdr: 二番目以降のリスト}</tt> > 217 という形で。この形でリストを扱わなければならないとい決まりはありませんが、 > 218 この形は特別扱いされて <tt>print</tt> で綺麗に出力されたります。 > 219 </p> 214 )) 220 )) 215 $(SECTION パターンマッチ, $(SECBODY 221 $(SECTION パターンマッチ, $(SECBODY 216 <p> 222 <p> 217 適当に実装されたパターンマッチがあります。 223 適当に実装されたパターンマッチがあります。 218 リストの 2n 番目と 2n+1 番目を足して長さを半分にする関数: 224 リストの 2n 番目と 2n+1 番目を足して長さを半分にする関数: 219 </p> 225 </p> 220 <pre> 226 <pre> ................................................................................................................................................................................ 487 ) 493 ) 488 }; 494 }; 489 495 490 Here, x is a syntax tree but n is an actual integer. If you read carefully, 496 Here, x is a syntax tree but n is an actual integer. If you read carefully, 491 you should get what is going on. Basically, @macro can be considered like 497 you should get what is going on. Basically, @macro can be considered like 492 quasiquoting and @value to be an escape from it. 498 quasiquoting and @value to be an escape from it. 493 </pre> 499 </pre> > 500 <p> > 501 構文木がどのようなテーブルで渡されてくるかについてはソースドキュメントの > 502 <a href="http://www.kmonos.net/repos/polemy/doc/tip/doc/ast.html">polemy.ast</a> > 503 のページをご覧下さい。例えば変数名を表す <code>Var</code> ラスには、 > 504 継承の分も合わせて > 505 <tt><a href="http://www.kmonos.net/repos/polemy/doc/tip/doc/failure.html">LexPos > 506 と <tt>string name;</tt> の2つのメンバがあるので > 507 </p> > 508 <pre> > 509 { is: "Var", > 510 pos: {filename:"foo.pmy", lineno:123, column:45}, > 511 name: "x" } > 512 </pre> > 513 <p> > 514 こんな感じのテーブルになります。 > 515 クラス名が <tt>is</tt> フィールドに、メンバ変数はそのまま名前で入ります。 > 516 配列メンバは cons リストになって入ってきます。 > 517 </p> 494 )) 518 )) 495 $(SECTION 微妙な挙動, $(SECBODY 519 $(SECTION 微妙な挙動, $(SECBODY 496 <pre> 520 <pre> 497 (rawmacro) レイヤの話 521 (rawmacro) レイヤの話 498 522 499 [[limitations]] 523 [[limitations]] 500 524