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

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

リポジトリはこちら

置換が簡単に直感的に

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

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