Saya sedang mengerjakan bahasa pemrograman kecil saya sendiri untuk tujuan pendidikan, dan saya mengalami sedikit masalah. Ada beberapa solusi berbeda untuk itu, tetapi semuanya tampaknya tidak sempurna - dan dari apa yang saya pahami, tidak perlu. Tetapi membaca buku-buku yang saya miliki dan pencarian google, saya tidak dapat menemukan solusi yang elegan.
Jadi, masalahnya adalah bahwa saya membangun kalkulus lambda dasar seperti yang saya mengerti. Saya telah mendefinisikan benar / salah sebagai istilah abstraksi. Saya dapat menggabungkan ini dengan fungsi yang harus dilakukan jika / maka / selain itu semacam perilaku. Masalahnya muncul dengan loop. Saya bisa mendefinisikan loop sementara dasar melalui rekursi, tetapi dalam praktiknya, itu menyebabkan stack overflow. Seperti yang saya pahami, solusi yang biasa dilakukan adalah dengan melakukan Tail Call Optimization, tetapi saya tidak melihat bagaimana saya bisa - kondisional didefinisikan dalam bahasa. Karena itu, kompiler tidak tahu bahwa tubuh loop sementara berada di posisi ekor.
Buku naga berfokus pada penerapan loop dengan asumsi ada label dan foto. Saya pasti bisa melakukan itu. Tampaknya seolah-olah bahasa lain yang tidak membangun dalam konstruksi perulangan setidaknya membangun dalam kondisi dan kemudian melakukan TCO. Dan saya pasti bisa melakukannya juga. Tetapi pemahaman saya adalah bahwa selama saya dapat menerapkan abstraksi dan melakukan reduksi, maka loop (dan yang lainnya) harus dapat dibangun dari blok dasar tersebut.
Jadi apa yang saya lewatkan? Atau apakah ini salah satu kasus di mana "Anda dapat memodelkan apa pun setelah Anda memiliki X dan Y" tidak sama dengan "Anda dapat memodelkan apa pun setelah Anda memiliki X dan Y di komputer nyata" dan built-in diperlukan untuk praktis tujuan?