Differences From Artifact [a3c506d4caf580c9]:
- File        
index.dd
- 2010-11-27 12:49:03 - part of checkin [a795c97dc3] on branch trunk - changed Let.init to Let.vdef. IT IS VERY DANGEROUS TO USE .init MEMBER NAME in D!!!!!!!! (user: kinaba) [annotate]
 
To Artifact [388d91fa67a7c403]:
- File        
index.dd
- 2010-11-27 14:23:54 - part of checkin [005474ba5b] on branch trunk - changed: not to lift _|_ (user: kinaba) [annotate]
 
   286    286   
   287    287   
   288    288   
   289    289   $(SECTION Layers, $(SECBODY
   290    290   <p>
   291    291   この言語の唯一の特徴的な部分は、「レイヤ」機能です。
   292    292   </p>
          293  +<p>
          294  +ひとつのコードに複数の「意味」を持たせるのが、レイヤ機能の目的です。
          295  +</p>
   293    296   $(DDOC_MEMBERS
   294         -$(SECTION Layers, $(SECBODY
          297  +$(SECTION 概要, $(SECBODY
          298  +<p>
          299  +普通に Polemy のコードを動かすと、そのコードは「<tt>@value</tt> レイヤ」で動作します。
          300  +インタプリタで実験。
          301  +</p>
          302  +<pre>
          303  +    $ bin/polemy
          304  +    Welcome to Polemy 0.1.0
          305  +    >> 1 + 2
          306  +    3
          307  +</pre>
          308  +この、普通に、数字の 1 は数字の 1 として、2 は 2 として、足し算は足し算として実行するのが、
          309  +「<tt>@value</tt> レイヤ」です。
          310  +レイヤを明示的に指定するには、<tt>レイヤ名( ... )</tt> という構文を使います。
          311  +$(RED $(B レイヤ指定式)) と読んでいます。
          312  +つまり、さっきのコードは以下のようにも書けます。
          313  +<pre>
          314  +    >> @value( 1 + 2 )
          315  +    3
          316  +</pre>
          317  +他のレイヤで動かしてみましょう。適当に。「<tt>@hoge</tt> レイヤ」で。
          318  +<pre>
          319  +    >> @hoge( 3 )
          320  +    polemy.failure.RuntimeException@C:\Develop\Projects\Polemy\polemy\eval.d(138):
          321  +    [<REPL>:4:8] lift function for @hoge is not registered
          322  +</pre>
          323  +<p>
          324  +エラーになりました。Polemy のインタプリタは、起動時には、<tt>@value</tt>
          325  +レイヤでのコードの意味しか知りません。<tt>@hoge</tt> レイヤでは <tt>3</tt>
          326  +というのがどんな意味なのか、わかりません!というエラーが出ています。
          327  +</p>
          328  +<p>
          329  +これを教えてあげるためには、<tt>@hoge</tt> レイヤの $(RED $(B リフト関数)) というものを定義します。
          330  +</p>
          331  +<pre>
          332  +    >> @@hoge = fun(x){ x*2 }
          333  +    (function:1bdc5c0:1ba8580)
          334  +</pre>
          335  +<p>
          336  +<tt>@hoge</tt> レイヤでは、<tt>1</tt> というコードの意味は <tt>2</tt>、
          337  +<tt>2</tt> というコードの意味は <tt>4</tt>、…、という、全部「2倍した意味」を持っていることにします。
          338  +「<tt>@ レイヤ名 = ...</tt>」 という構文を使います。
          339  +ここには、「<tt>@value</tt> レイヤでの値 <tt>x</tt> は <tt>@hoge</tt> レイヤではどういう意味になるか?」
          340  +を計算して返す関数を登録します。
          341  +これで、Polemy にも、<tt>@hoge</tt> レイヤの意味がわかるようになりました。
          342  +</p>
          343  +<pre>
          344  +    >> @hoge( 3 )
          345  +    6
          346  +</pre>
          347  +<p>
          348  +では、1+2 を <tt>@hoge</tt> レイヤで動かしてみましょう。
          349  +</p>
          350  +<pre>
          351  +    >> @hoge( 1 + 2 )
          352  +    polemy.failure.RuntimeException@C:\Develop\Projects\Polemy\polemy\eval.d(466):
          353  +    [<REPL>:3:7] only @value layer can call native function: +
          354  +    [<REPL>:3:7] +
          355  +</pre>
          356  +<p>
          357  +まだエラーですね。これは 実は、リフト関数は
          358  +</p>
          359  +<pre>
          360  +    >> @hoge "+" = fun(x, y) {x}
          361  +</pre>
   295    362   <pre>
   296    363   [Layers :: Overview]
   297    364   
   298    365     Polemy's runtime environment has many "layer"s.
   299    366     Usual execution run in the @value layer.
   300    367   
   301    368       >> 1 + 2
................................................................................
   715    782   <br />
   716    783   
   717    784   $(SECTION データ型判定, $(SECBODY
   718    785     $(TABLE
   719    786       $(TR $(TH _isint) $(TD (a)) $(TD a が整数なら 1、でなければ 0))
   720    787       $(TR $(TH _isstr) $(TD (a)) $(TD a が文字列なら 1、でなければ 0))
   721    788       $(TR $(TH _isfun) $(TD (a)) $(TD a が関数なら 1、でなければ 0))
   722         -    $(TR $(TH _istable) $(TD (a)) $(TD a がテーブルなら 1、でなければ 0))
   723         -    $(TR $(TH _isundefined) $(TD (a)) $(TD a が未定義値なら 1、でなければ 0))
          789  +    $(TR $(TH _istbl) $(TD (a)) $(TD a がテーブルなら 1、でなければ 0))
          790  +    $(TR $(TH _isbot) $(TD (a)) $(TD a が未定義値なら 1、でなければ 0))
   724    791     )
   725    792   ))
   726    793   )
   727    794   ))
   728    795   
   729    796   )
   730    797   Macros:
   731    798       TITLE=Polemy Reference Manual
   732    799       DOCFILENAME=index.html
   733    800       SECTION=$(DDOC_DECL $(DDOC_PSYMBOL $1)) $(DDOC_DECL_DD $2)
   734    801       SECBODY=$0