文の種類


  soopyの構文は非常に単純です。大きくわけると次の5種類だけです。

   1.算術式(+、−、*、/、%)、論理式(and、or)などの単純な式
   2.代入文
   3.メッセージ式
   4.制御構造 -- 条件分岐(match)と繰り返し(loop)。
   5.定数や関数の宣言。

  それぞれの文について簡単に説明します。


単純な式


    単純な式には、単項演算子と2項演算子があります。

     算術式の
       加算(+)、減算(−)、掛け算(*)、割り算(/)、剰余(%)
     論理式の
       アンド(and)、オア(or)、否定(!)
       等値(==)、等しくない(!=)、
       大きい(>)、以上(>=)、小さい(<)、以下(<=)
     そのほかに、LispにおけるConsに値する(::)演算子や、@演算子などがあります。

   演算子の優先順位は以下のとおりです。(ただし、将来的には優先順位は
   変わる可能性もある。(現時点では深く考えてないもんで。。。^_^;))

    優先順位

     低い  or
         and
         !
         ==, !=
         >, >=, <, <=
         +, -
         *, /, %
         −(単項)
     高い  .., ::, //, @





代入文



普通の代入


    代入文は、イコール(=)で結ばれた左辺の指し示す場所に
   右辺の値を結び付けます。
    ま。手続き型の言語にはよくあるやつです。

    例。

              pi = 3.14;

              msg = "Hello, world!";

              anArray(2,3) = 'c';

              square = {arg:[x]; do:[x * x];};

              anObject aFeature = "Hummm?";


      などなど。


多重代入


    多重代入は一度に複数の場所に値を結びつけます。

    例。

              let (x,y,z) = (2, 'a', "hello");
              let [x,y,z] = [2, 'a', "hello"];
              let x::xs   = [2, 'a', "hello"];  # x = 2; xs =['a', "hello"];




メッセージ式


    オブジェクト指向言語にとって、もっとも重要な文です。
   といっても、ただたんにオブジェクトにメッセージを送るだけですけどね。(^_^;
   (soopyでは、関数コールもメッセージ式として実現されています。)
    soopyにおいては、以下のような構文になっています。

    <オブジェクト> <メッセージ>

    例。

             "string" length;

             [1,2,3] map ({arg:[x]; do:[x+1];} eval);

             [3...7] each ({arg:[x]; do:[println x];} eval);

             {
               fun main(){do: println "Hello, world!";};
             } main();

             {
               a: 3;
               fun f(x){do:a+x;};
             } f 7;




コメント


    /* と */ に囲まれた部分はコメントです。
    # から行末までもコメントです。