Open6

ラムダ計算がそのまま書ける自作関数型言語Lamuta

KazyKazy

このスクショのようにラムダ計算の数式がほぼそのまま書けます。

KazyKazy

組み込み関数一覧

type: 値の型シグネチャを取得。
std: 標準ライブラリへのURL。loadで読み込んで使う。
env: 環境にある変数と値を持つ構造体を返す。
free: 参照の指すメモリを解放。保護された領域は不可。
eval: 文字列を式として評価。独自のコンテキストも構造体で指定できる。
alphaConvert: ラムダ抽象をアルファ変換する。
input: プロンプトを表示しコンソールで入力を受け付る。
readFile: ファイル読み込みしてその文字列を返す。
load: モジュールを読み込む。リモートも可能
save: 環境をファイルに保存。REPLで遊ぶ時に使う。
sleep: 指定した秒数スレッドを眠らせる。
exit: 終了コードを受け取ってプログラムを終了する。

KazyKazy

オブジェクト指向感が強くなってきた。関数型パラダイムとは矛盾しないように工夫はしてるけど

const Animal: #Animal = @{
    "class": #Animal,
    "name": null,
    "voice": null,
    "asText": fn(this ->
        f"{this.name} <<< {this.voice}, {this.voice}!"
    )
};

const Dog: #Dog = Animal + @{
    "class": #Dog,
    "voice": "bark"
};

const Cat: #Cat = Animal + @{
    "class": #Cat,
    "voice": "meow"
};

let pochi: #Dog = Dog + @{ "name": "Pochi" };
let kuro: #Dog = Dog + @{ "name": "Kuro" };
print f"{pochi}\n", f"{kuro}\n";

let mike: #Cat = Cat + @{ "name": "Mike" };
let tama: #Cat = Cat + @{ "name": "Tama" };
print f"{mike}\n", f"{tama}\n";