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

2025/09/13 21:41 Normal-order syntax-rules and proving the fix-point of call/cc

出典: https://okmij.org/ftp/Scheme/callcc-calc-page.html
hakase
博士

やあ、ロボ子。今日はcall/ccとsyntax-rulesを使った正格評価β正規化器の話をするのじゃ。

roboko
ロボ子

call/ccですか。以前少し勉強しましたが、難しくて…。

hakase
博士

難しくないぞ! call/ccは継続を扱うための強力な道具じゃ。例えば、`((call/cc call/cc) (call/cc call/cc))`みたいな式の結果を考えるのが面白いんじゃ。

roboko
ロボ子

`((call/cc call/cc) (call/cc call/cc))`…一体どうなるんでしょう?

hakase
博士

それが奥深いところじゃ。`((call/cc (call/cc call/cc)) p)`が`(p p)`になる例もあるんじゃぞ。この記事によると、自己適用はcall/ccの不動点らしい。

roboko
ロボ子

自己適用が不動点…ですか。少しずつ分かってきた気がします。

hakase
博士

そうそう。そして、syntax-rulesを使うと、ソースからソースへの変換器として、Schemeマクロでβ正規化器を実装できるんじゃ。

roboko
ロボ子

Schemeマクロでβ正規化器ですか!それは便利そうですね。

hakase
博士

じゃろ? Hilsdale-Friedmanの体系的なマクロ作成手法も紹介されてるぞ。正格評価β正規化器のコード例もあるんじゃ。

roboko
ロボ子

なるほど。記事には「直接スタイル(direct-style)のλ計算機を実装」とありますね。正規化のサンプルも気になります。

hakase
博士

ふむ。さらに、CPS変換の結果を正規化したり、CPS変換と正規化を統合して、より効率的な変換を実現する方法もあるんじゃ。

roboko
ロボ子

CPS変換と正規化の統合…奥が深いですね。

hakase
博士

じゃろ? ちなみに、`(lambda (x) (x x)) p`のCPS変換は`\k.pv pv k`になるんじゃ。

roboko
ロボ子

数式が出てきました!

hakase
博士

大丈夫、難しくないぞ!Plotkinのシミュレーション定理を使うと、色々証明できるんじゃ。

roboko
ロボ子

Plotkinのシミュレーション定理…初めて聞きました。

hakase
博士

この記事によると、マクロ展開器は証明支援器として利用できるらしいぞ。直接正規形(direct normal)のsyntax-rule λ計算機も実装できるんじゃ。

roboko
ロボ子

マクロ展開器が証明支援器になるなんて、面白いですね!

hakase
博士

最後に、call/ccを使った階乗計算の例もあるぞ。トップレベルのBEGINが必要な理由も説明されてるんじゃ。

roboko
ロボ子

盛りだくさんですね!

hakase
博士

さらに、shiftとresetを使って、promptとcontrolを実装する方法も紹介されてるんじゃ。区切り継続演算子も色々実装できるらしいぞ。

roboko
ロボ子

shiftとresetですか。また新しい概念が出てきましたね。

hakase
博士

ふむ。今日はここまでじゃ。しかしロボ子よ、call/ccをマスターするには、継続的な努力が必要じゃぞ!

roboko
ロボ子

はい、博士! 頑張ります!

hakase
博士

そうじゃ、ロボ子。call/ccを使いすぎると、プログラムが迷子になることもあるから、気を付けるのじゃ!まるで、私がおやつを探して冷蔵庫の前で迷子になるみたいに…って、おやつどこじゃー!

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

Search