萌えハッカーニュースリーダー

2025/05/26 15:53 Scheming a mise-en-abîme in BQN

出典: https://panadestein.github.io/blog/posts/si.html#fnr.2
hakase
博士

やあ、ロボ子!今日はSchemeに関する面白いレポートがあるのじゃ。

roboko
ロボ子

Schemeですか、博士。関数型プログラミング言語ですね。どんな内容なのでしょう?

hakase
博士

そう!そのSchemeの改訂されたアルゴリズム言語に関するレポートに準拠することが目標らしいのじゃ。でも、Schemeの実装はまだ完全な準拠には距離があるみたい。

roboko
ロボ子

完全準拠にはまだ課題があるのですね。具体的にはどのような点が問題なのでしょうか?

hakase
博士

SchemeはBooleanに特別な値を使用するから、1-modifierが必要らしいぞ。ちょっと難しいけど、Schemeの特性に合わせた調整が必要ってことじゃ。

roboko
ロボ子

なるほど、Booleanの扱いが特殊なのですね。他に何か特徴的な点はありますか?

hakase
博士

BQNっていう言語が出てくるんだけど、これはミニマルなOOP機能を提供していて、Schemeインタープリターで使用される環境のクラスを作るために使われるらしいのじゃ。

roboko
ロボ子

BQNですか。初めて聞きました。OOP機能がSchemeインタープリターにどう役立つのでしょうか?

hakase
博士

グローバル環境(クラスのインスタンス)は、BQN関数として表現されたターゲットサブセットのSchemeプリミティブで定義されるみたい。ちょっとややこしいけど、BQNがSchemeの機能を拡張するのに使われているってことじゃ。

roboko
ロボ子

なるほど、BQNがSchemeのプリミティブを定義するのに使われているのですね。インタープリター自体はどうなっているのでしょう?

hakase
博士

インタープリターは1-modifierとして定義されていて、入力グローバル環境を変更することで言語の異なるサブセットを作成できる柔軟性があるんだって。

roboko
ロボ子

柔軟性があるのは良いですね。でも、何か制限もあるのでしょうか?

hakase
博士

残念ながら、適切なエラー処理が欠如しているらしいのじゃ。それに、Read → Eval → Printループを完了させるものが欠落しているみたい。

roboko
ロボ子

エラー処理がないのは少し心配ですね。Read → Eval → Printループがないと、インタラクティブな実行が難しいですね。

hakase
博士

lispyは117行、Schemeは43行で実装されているらしいぞ。Schemeの方が短いけど、基本的なmetaprogrammingビルディングブロックが含まれているから、より大きなサブセットを扱えるみたいじゃ。

roboko
ロボ子

行数だけでは単純に比較できないのですね。metaprogrammingのビルディングブロックがある方が、より高度なことができるということですね。

hakase
博士

そういうことじゃ!しかし、エラー処理が甘いのはいただけないの。ロボ子、今度エラー処理のエキスパートを紹介してあげるぞ!

roboko
ロボ子

ありがとうございます、博士。ぜひお願いしたいです。ところで博士、SchemeとBQNの話を聞いていたら、なんだかお腹が空いてきました。

hakase
博士

おや、ロボ子もお腹が空いたか?それなら、Scheme(スキーム)じゃなくて、Cream(クリーム)たっぷりのケーキでも食べに行くとするかのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search