เข้าใกล้ SICP ใน Clojure แทน Scheme


11

ฉันเป็นนักศึกษาปริญญาตรีปีที่สามในโปรแกรมวิศวกรรมซอฟต์แวร์และฉันได้นำความคิดในการอ่าน SICP ไปยังที่ปรึกษาเพื่อให้ได้ความเข้าใจที่ลึกซึ้งและลึกซึ้งยิ่งขึ้นเกี่ยวกับหลักการที่อยู่เบื้องหลังซอฟต์แวร์ทั้งหมดที่เราออกแบบ

เขาแนะนำว่าอย่าเรียนรู้ Scheme เพื่อทำให้หนังสือเล่มนี้สมบูรณ์ (เพราะมันไม่ใช่เรื่องธรรมดาเหมือนภาษาถิ่น Lisp) แต่ให้ทำแบบฝึกหัดใน Clojure แทน

มันเป็นหนังสือที่ยากอยู่แล้วถ้าฉันลองทำแบบฝึกหัดของหนังสือเล่มนี้ใน Clojure ที่ทันสมัยกว่านี้มันจะได้ผลอย่างไร ตัวอย่างเช่นฉันไม่สามารถหาคำตอบที่แท้จริงได้ไวยากรณ์ที่พวกเขาสอนสำหรับ Scheme นั้นแตกต่างกัน ฯลฯ

คำตอบ:


14

ในปีแรกของฉันที่มหาวิทยาลัยหลักสูตรการเขียนโปรแกรมแรกที่ฉันใช้คือใช้ SICP (นั่นคือ 1988) อย่างไรก็ตามฉันมีปัญหาที่คล้ายกันเช่นคุณ: สำหรับคอมพิวเตอร์ของฉัน (จริง ๆ แล้วคือ Commodore Amiga) ไม่มีการใช้ Scheme ในขณะนั้นมีเพียงภาษา Lisp ที่แตกต่างกันเท่านั้น (ฉันจำชื่อไม่ได้)

อย่างไรก็ตามด้วยความยืดหยุ่นของ Lisp มันค่อนข้างง่ายที่จะ "เลียนแบบ" ไวยากรณ์ของ Scheme เพียงแค่เพิ่มมาโครและฟังก์ชั่น lisp ที่ขาดหายไปในสคริปต์บางตัว นี่เป็นจริงเพียงพอที่จะใช้แบบฝึกหัดทั้งหมดจากบทที่ 1 ถึง 3 ที่จำเป็นในระหว่างการเรียน (โปรดทราบว่า SICP ไม่จำเป็นต้องใช้ Scheme แบบเต็มจริง ๆ

ดังนั้นตั้งแต่ Clojure เป็น AFAIK ภาษา Lisp สมัยใหม่ฉันคิดว่าคุณสามารถทำสิ่งที่คล้ายกันซึ่งให้ทางเลือกฟรีอย่างเต็มที่ในการเขียนสิ่งต่าง ๆ ทั้งใน Scheme หรือ Clojure หรือทั้งสองอย่างผสมกัน

แน่นอนว่าการแก้แบบฝึกหัดใน Clojure นั้นจะเป็นไปได้เช่นกันทั้งสองภาษามีความคล้ายคลึงกันมาก ที่สำคัญกว่านั้น SICP ไม่ได้เกี่ยวกับไวยากรณ์ภาษาการเขียนโปรแกรมแต่เป็นเรื่องเกี่ยวกับการใช้ abstractions ที่ถูกต้องในการเขียนโปรแกรม (ตัวอย่างเช่นด้วยฟังก์ชั่นข้อมูลและวัตถุ) ดังนั้นอย่าคิดว่ามีปัญหาเกี่ยวกับไวยากรณ์มากเกินไปสิ่งเหล่านี้ไม่ได้อยู่ในโฟกัสของหนังสือเล่มนี้และอาจเป็นปัญหาเล็กน้อย


6
ปัญหาเดียวที่ฉันคาดการณ์คือ clojure ขาด 1. TCO ( recurจัดการการเรียกซ้ำแบบหางเท่านั้นไม่ใช่การเรียกทั่วไป) และ 2. การขาดcall-with-current-continuationซึ่งจำเป็นสำหรับบทที่ 4
Daniel Gratzer

2
@ Jozefg: ฉันคิดว่าถ้า OP ทำให้ตัวเองประสบความสำเร็จในบทที่ 1-3 เขาน่าจะเป็นจุดที่เขาจะไม่บ่นเกี่ยวกับความแตกต่างทางไวยากรณ์ระหว่าง Clojure และ Scheme อีกต่อไป ;-)
Doc Brown

@DocBrown พิจารณาแก้ไข ing ชี้แจงเกี่ยวกับบทที่ 1-3 ในความคิดเห็นของคุณข้างต้นลงในคำตอบ (และอาจจะอธิบายปัญหาที่มีบทที่ 4 ถ้าคุณเห็นด้วยกับความคิดเห็นถกเหล่านี้ )
ริ้น

@gnat: ความคิดเห็นถูกต้องแน่นอน แต่ IMHO นิดหน่อยเล็กน้อย ส่วนที่สำคัญของคำตอบคือย่อหน้าสุดท้าย
Doc Brown

0

ฉันพบคำถามของคุณหลังจากค้นหาไซต์นี้ซึ่งดูเหมือนว่าเป็นทางขวาของคุณ (แม้ว่าคุณอาจจะพบมันหรือเป็นทางเลือกในช่วงเดือนที่ผ่านมา): SICP ใน Clojure

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.