Sukuna

Sukunaについて

SukunaはOO拡張を最初から組み込んであるForth dialectです。
Mops、Joy、Rubyなどに影響を受けて作られました。

Sample Code

関数定義
    { square  dup * }
または
    { square | x | x x * }

Bank Account
 class BankAccount
     float dollars accessor
     { deposit: 
        self :dollars :+ self :setDollars }
     { withdraw: 
        :negate self :dollars :+ 0 :max self :setDollars }
 end
 
 BankAccount :new -> MyAccount
 200 MyAccount :setDollars
 MyAccount :dollars :p cr           # 200.000000
 
 50 MyAccount :deposit 
 MyAccount :dollars :p cr           # 250.000000
 
 100 MyAccount :withdraw 
 MyAccount :dollars :p cr           # 150.000000
 
 200 MyAccount :withdraw 
 MyAccount :dollars :p cr           # 0.000000

動物クラス
 class 生物
 end
 
 class 哺乳類 super{ 生物 }
 end
 
 class 両生類 super{ 生物 }
 end
 
 mixin 鳴ける
    { 鳴け: }
 end
 
 class 犬 super{ 鳴ける 哺乳類 }
     { 鳴け: " わんわん" :print cr }
 end
 
 class 猫 super{ 鳴ける 哺乳類 }
     { 鳴け: " にゃぁにゃぁ" :print cr }
 end
 
 class 蛙 super{ 鳴ける 両生類 }
     { 鳴け: " けろけろ" :print cr }
 end
 
 # 「鳴ける」というmixinを指定して鳴く。
 犬 ポチ
 猫 タマ
 蛙 ケロッピ 
 ( ポチ タマ ケロッピ ) [ as 鳴ける :鳴け ] :each

VectorとMap
 # 1から10の数値をそれぞれ2倍。
 ( 1 .. 10 ) [ 2 * ] :map

Accumulator Generator
 { foo | n | [ n :+ -> n ]~ }

My Loop
 { myLoop | fn: cond fn: body | recursive
     if cond then
         body
         ` cond ` body myLoop
     endif
 }
 
 { main | : i |
     10 -> i
     [ i >: 0 ; print: i  -- i ] myLoop
 }

Contents

News

2004-02-22
 サイト再構築。

Download