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  $(SECTION Layers, $(SECBODY                                                          289  $(SECTION Layers, $(SECBODY
  290  <p>                                                                                  290  <p>
  291  この言語の唯一の特徴的な部分は、「レイヤ」機能です。                                                           291  この言語の唯一の特徴的な部分は、「レイヤ」機能です。
  292  </p>                                                                                 292  </p>
                                                                                        >   293  <p>
                                                                                        >   294  ひとつのコードに複数の「意味」を持たせるのが、レイヤ能の目的です。
                                                                                        >   295  </p>
  293  $(DDOC_MEMBERS                                                                       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  <pre>                                                                                362  <pre>
  296  [Layers :: Overview]                                                                 363  [Layers :: Overview]
  297                                                                                       364  
  298    Polemy's runtime environment has many "layer"s.                                    365    Polemy's runtime environment has many "layer"s.
  299    Usual execution run in the @value layer.                                           366    Usual execution run in the @value layer.
  300                                                                                       367  
  301      >> 1 + 2                                                                         368      >> 1 + 2
................................................................................................................................................................................
  715  <br />                                                                               782  <br />
  716                                                                                       783  
  717  $(SECTION データ型判定, $(SECBODY                                                          784  $(SECTION データ型判定, $(SECBODY
  718    $(TABLE                                                                            785    $(TABLE
  719      $(TR $(TH _isint) $(TD (a)) $(TD a が整数なら 1、でなければ 0))                             786      $(TR $(TH _isint) $(TD (a)) $(TD a が整数なら 1、でなければ 0))
  720      $(TR $(TH _isstr) $(TD (a)) $(TD a が文字列なら 1、でなければ 0))                            787      $(TR $(TH _isstr) $(TD (a)) $(TD a が文字列なら 1、でなければ 0))
  721      $(TR $(TH _isfun) $(TD (a)) $(TD a が関数なら 1、でなければ 0))                             788      $(TR $(TH _isfun) $(TD (a)) $(TD a が関数なら 1、でなければ 0))
  722      $(TR $(TH _istable) $(TD (a)) $(TD a がテーブルなら 1、でなければ 0))                     |   789      $(TR $(TH _istbl) $(TD (a)) $(TD a がテーブルなら 1、でなければ 0))
  723      $(TR $(TH _isundefined) $(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  Macros:                                                                              797  Macros:
  731      TITLE=Polemy Reference Manual                                                    798      TITLE=Polemy Reference Manual
  732      DOCFILENAME=index.html                                                           799      DOCFILENAME=index.html
  733      SECTION=$(DDOC_DECL $(DDOC_PSYMBOL $1)) $(DDOC_DECL_DD $2)                       800      SECTION=$(DDOC_DECL $(DDOC_PSYMBOL $1)) $(DDOC_DECL_DD $2)
  734      SECBODY=$0                                                                       801      SECBODY=$0