Mendekati SICP di Clojure bukannya Skema

11

Saya seorang mahasiswa tahun ketiga dalam program rekayasa perangkat lunak, dan saya membawa gagasan membaca SICP kepada seorang penasihat untuk mendapatkan pemahaman yang lebih dalam dan lebih mendasar tentang prinsip-prinsip di balik semua perangkat lunak yang kami rekayasa ini.

Dia menyarankan untuk tidak mempelajari Skema untuk menyelesaikan buku (karena itu tidak biasa seperti dialek Lisp modern) tetapi untuk melakukan latihan di Clojure sebagai gantinya.

Ini buku yang sudah sulit, jika saya mencoba latihan buku di Clojure yang lebih modern, bagaimana cara kerjanya? Misalnya, saya tidak dapat menemukan solusi nyata, sintaks yang mereka ajarkan untuk Skema berbeda, dll.

ironisdiksi
sumber

Jawaban:

14

Pada tahun pertama saya di universitas, kursus pemrograman pertama yang saya ambil menggunakan SICP (1988). Namun, saya memiliki masalah yang sama seperti Anda: untuk komputer saya sendiri (sebenarnya Commodore Amiga), tidak ada implementasi Skema yang tersedia pada saat itu, hanya dialek Lisp yang berbeda (saya tidak ingat namanya).

Namun, mengingat fleksibilitas Lisp, cukup mudah untuk "meniru" sintaks Skema hanya dengan menambahkan makro dan fungsi lisp yang hilang dalam beberapa skrip. Ini sebenarnya cukup untuk melaksanakan semua latihan dari bab 1 hingga 3 yang diperlukan selama kursus (perhatikan bahwa SICP sebenarnya tidak memerlukan tumpukan Skema lengkap, hanya sebagian kecil yang Anda butuhkan).

Jadi karena Clojure adalah AFAIK dialek Lisp modern, saya kira Anda bisa melakukan sesuatu yang serupa, yang memberi Anda pilihan bebas sepenuhnya untuk menulis hal-hal baik dalam Skema atau Clojure atau campuran keduanya.

Tentu saja, menyelesaikan latihan langsung di Clojure juga dimungkinkan, kedua bahasa sangat mirip. Lebih penting lagi, SICP bukan tentang sintaksis bahasa pemrograman , ini tentang penggunaan yang tepat dari abstraksi dalam pemrograman (misalnya, dengan fungsi, data, dan objek). Jadi jangan terlalu banyak memikirkan kemungkinan masalah sintaksis, ini tidak ada dalam fokus buku ini dan kemungkinan besar hanya menjadi perhatian kecil.

Doc Brown
sumber
6
Satu-satunya masalah yang saya perkirakan adalah bahwa clojure tidak memiliki 1. TCO ( recurhanya menangani rekursi ekor , bukan panggilan umum) dan 2. kekurangan call-with-current-continuationyang diperlukan untuk bab 4.
Daniel Gratzer
2
@ jozefg: Saya pikir jika OP berhasil melalui bab 1-3, dia kemungkinan besar akan pada titik di mana dia tidak akan mengeluh tentang perbedaan sintaksis antara Clojure dan Skema lagi ;-)
Doc Brown
@DocBrown pertimbangkan untuk mengedit klarifikasi tentang bab 1-3 dalam komentar Anda di atas ke dalam jawaban (dan mungkin menjelaskan masalah dengan bab 4, jika Anda setuju dengan komentar yang membahas hal ini )
agung
@gnat: komentarnya memang benar, tapi IMHO sedikit perlu. Bagian penting dari jawaban saya adalah paragraf terakhir.
Doc Brown
0

Saya menemukan pertanyaan Anda tepat setelah menemukan situs ini yang sepertinya tepat di depan Anda (meskipun Anda mungkin telah menemukannya atau alternatif dalam bulan-bulan berikutnya): SICP di Clojure

Paul Bissex
sumber