Tiếp cận SICP trong Clojure thay vì Scheme


11

Tôi là sinh viên năm thứ ba chương trình kỹ sư phần mềm và tôi đã nảy ra ý tưởng đọc SICP cho một cố vấn để hiểu sâu hơn và cơ bản hơn về các nguyên tắc đằng sau tất cả phần mềm này mà chúng tôi thiết kế.

Ông đề nghị không học Scheme để hoàn thành cuốn sách (vì nó không phổ biến như phương ngữ hiện đại của Lisp) mà thay vào đó hãy thực hiện các bài tập trong Clojure.

Đó là một cuốn sách đã khó, nếu tôi thử các bài tập của cuốn sách trong Clojure hiện đại hơn, thì nó sẽ hoạt động như thế nào? Ví dụ: tôi không thể tìm thấy bất kỳ giải pháp thực tế nào, cú pháp họ dạy cho Lược đồ là khác nhau, v.v.

Câu trả lời:


14

Trong năm đầu tiên của tôi tại trường đại học, khóa học lập trình đầu tiên tôi tham gia là sử dụng SICP (đó là năm 1988). Tuy nhiên, tôi cũng gặp một vấn đề tương tự như bạn: đối với máy tính của riêng tôi (thực ra là Commodore Amiga), không có triển khai Đề án có sẵn tại thời điểm đó, chỉ có một phương ngữ Lisp khác (tôi không nhớ tên của nó).

Tuy nhiên, do tính linh hoạt của Lisp, việc "mô phỏng" cú pháp Scheme khá đơn giản chỉ bằng cách thêm các macro và hàm thiếu trong các tập lệnh. Điều này thực sự đủ để thực hiện tất cả các bài tập từ chương 1 đến 3 trong suốt khóa học (lưu ý rằng SICP thực sự không yêu cầu ngăn xếp Scheme đầy đủ, một tập hợp con nhỏ là tất cả những gì bạn cần).

Vì Clojure là một phương ngữ Lisp hiện đại, tôi đoán bạn có thể làm điều gì đó tương tự, cho phép bạn lựa chọn hoàn toàn tự do để viết những thứ trong Scheme hoặc Clojure hoặc kết hợp cả hai.

Tất nhiên, việc giải các bài tập trực tiếp trong Clojure cũng sẽ có thể, cả hai ngôn ngữ đều rất giống nhau. Quan trọng hơn, SICP không phải là về cú pháp ngôn ngữ lập trình , nó là về việc sử dụng đúng các khái niệm trừu tượng trong lập trình (ví dụ, với các hàm, dữ liệu và đối tượng). Vì vậy, đừng nghĩ quá nhiều về các vấn đề cú pháp có thể xảy ra, đây không phải là trọng tâm của cuốn sách này và có lẽ là mối quan tâm nhỏ.


6
Vấn đề duy nhất tôi thấy trước là clojure thiếu 1. TCO ( recurchỉ xử lý đệ quy đuôi , không gọi chung) và 2. thiếu trong call-with-current-continuationđó là cần thiết cho chương 4.
Daniel Gratzer

2
@jozefg: Tôi nghĩ rằng nếu OP thành công qua các chương 1-3, rất có thể anh ta sẽ không phàn nàn về sự khác biệt cú pháp giữa Clojure và Scheme nữa ;-)
Doc Brown

@DocBrown xem xét chỉnh sửa ing làm rõ về các chương 1-3 trong nhận xét của bạn ở trên thành câu trả lời (và có thể giải thích các vấn đề với chương 4, nếu bạn đồng ý với nhận xét thảo luận về những điều này )
gnat

@gnat: nhận xét chắc chắn là đúng, nhưng IMHO hơi nitty. Phần quan trọng trong câu trả lời của tôi là đoạn cuối cùng.
Doc Brown

0

Tôi đã tìm thấy câu hỏi của bạn ngay sau khi tìm thấy trang web này có vẻ như nó nằm ngay trên con hẻm của bạn (mặc dù bạn có thể đã tìm thấy nó hoặc một giải pháp thay thế trong những tháng qua): SICP ở Clojure

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.