私は教育目的で自分の小さなプログラミング言語に取り組んでおり、少し問題に遭遇しました。それにはいくつかの異なる解決策がありますが、それらはすべて洗練されていないように見えます-私が理解している限りでは不要です。しかし、私が持っている本やグーグル検索を読んでも、エレガントな解決策を見つけることができません。
だから問題は、私が理解しているように、基本的なラムダ計算を構築していることです。true / falseを抽象用語として定義しました。これらを関数と組み合わせて、if / then / elseの動作を実行できます。問題はループで発生します。再帰によって基本的なwhileループを定義できますが、実際にはスタックオーバーフローが発生します。私が理解しているように、通常の解決策はテールコールの最適化を実行することですが、どうすればよいかわかりません。条件文は言語で定義されています。そのため、コンパイラーは、whileループの本体が末尾にあることを認識しません。
ドラゴンブックは、ラベルとゴトがあると仮定してループを実装することに焦点を当てています。私は確かにそれをすることができました。ループ構造を組み込まない他の言語は、少なくとも条件文を組み込んでからTCOを行うように見えます。そして、私も確かにそれを行うことができました。しかし、私の理解では、抽象化を適用して削減を実行できる限り、ループ(およびその他すべて)はこれらの基本ブロックから構築できるはずです。
それで私は何が欠けていますか?それとも、「XとYがあれば何でもモデル化できる」が「実際のコンピュータでXとYがあれば何でもモデル化できる」とは異なり、実用的に組み込みが必要なケースの1つですか?目的?