ฉันรู้ว่าพวกเขาเป็นภาษาถิ่นในตระกูลเดียวกันที่เรียกว่า lisp แต่อะไรคือความแตกต่างกันแน่? คุณช่วยให้ภาพรวมครอบคลุมหัวข้อต่างๆเช่นไวยากรณ์ลักษณะคุณลักษณะและแหล่งข้อมูลหากเป็นไปได้
ฉันรู้ว่าพวกเขาเป็นภาษาถิ่นในตระกูลเดียวกันที่เรียกว่า lisp แต่อะไรคือความแตกต่างกันแน่? คุณช่วยให้ภาพรวมครอบคลุมหัวข้อต่างๆเช่นไวยากรณ์ลักษณะคุณลักษณะและแหล่งข้อมูลหากเป็นไปได้
คำตอบ:
พวกเขาทั้งหมดมีหลายสิ่งที่เหมือนกัน:
(function-name arg1 arg2)
คุณสมบัติที่โดดเด่นของ Lisp ทั่วไป:
คุณสมบัติที่โดดเด่นของ Clojure:
[]
และแผนที่ที่{}
ใช้เป็นมาตรฐานนอกเหนือจากรายการมาตรฐาน()
นอกเหนือจากความสมบูรณ์ของเวกเตอร์และแผนที่บางคนเชื่อว่านี่เป็นนวัตกรรมที่ทำให้โดยทั่วไปอ่านได้ง่ายขึ้นคุณสมบัติที่โดดเด่นของโครงการ:
คนข้างบนพลาดไปสองสามอย่าง
Common Lisp มีเวกเตอร์และตารางแฮชด้วย ความแตกต่างคือ Common Lisp ใช้ # () สำหรับเวกเตอร์และไม่มีไวยากรณ์สำหรับตารางแฮช ฉันเชื่อว่าโครงการมีเวกเตอร์
Common Lisp มีมาโครตัวอ่านซึ่งอนุญาตให้คุณใช้วงเล็บใหม่ (เช่นเดียวกับ Racket ซึ่งเป็นลูกหลานของ Scheme)
Scheme และ Clojure มีมาโครที่ถูกสุขอนามัยซึ่งต่างจากที่ไม่ถูกสุขอนามัยของ Common Lisp
ภาษาทั้งหมดเป็นภาษาที่ทันสมัยหรือมีโครงการปรับปรุงใหม่มากมาย Common Lisp มีห้องสมุดมากมายในช่วงห้าปีที่ผ่านมา (ขอบคุณ Quicklisp เป็นส่วนใหญ่) Scheme มีการใช้งานที่ทันสมัย (Racket, Chicken, Chez Scheme ฯลฯ ) และ Clojure ถูกสร้างขึ้นเมื่อไม่นานมานี้
Common Lisp มีระบบ OO ในตัวแม้ว่าจะค่อนข้างแตกต่างจากระบบ OO อื่น ๆ ที่คุณอาจเคยใช้ โดยเฉพาะอย่างยิ่งไม่มีการบังคับใช้ - คุณไม่จำเป็นต้องเขียนรหัส OO
ภาษามีปรัชญาการออกแบบที่แตกต่างกันบ้าง โครงการได้รับการออกแบบให้เป็นภาษาถิ่นน้อยที่สุดสำหรับการทำความเข้าใจโมเดลนักแสดง ต่อมาถูกนำมาใช้เพื่อการเรียนการสอน Common Lisp ได้รับการออกแบบมาเพื่อรวมภาษาถิ่นของ Lisp มากมายที่ผุดขึ้นมา Clojure ออกแบบมาสำหรับการทำงานพร้อมกัน ด้วยเหตุนี้ Scheme จึงมีชื่อเสียงในด้านความเรียบง่ายและสง่างาม Common Lisp ของการมีพลังและกระบวนทัศน์ไม่เชื่อเรื่องพระเจ้า (functional, OO, อะไรก็ได้) และ Clojure ที่ชอบการเขียนโปรแกรมเชิงฟังก์ชัน
อย่าลืมเกี่ยวกับความแตกต่างของ Lisp-1 และ Lisp-2
Scheme และ Clojure คือ Lisp-1:
นั่นหมายความว่าทั้งตัวแปรและชื่อฟังก์ชันอยู่ในเนมสเปซเดียวกัน
Common Lisp คือ Lisp-2:
ฟังก์ชันและตัวแปรมีเนมสเปซที่แตกต่างกัน (ในความเป็นจริง CL มีหลายเนมสเปซ)
Gimp เขียนใน Scheme :)
ในความเป็นจริงการจัดสรรซอฟต์แวร์บางคนคิดว่าอาจเขียนด้วย C ++ นั้นอาจทำภายใต้ร่ม Lisp มันยากที่จะเลือกแอปเปิ้ลสีทองออกจากพวง ความจริงก็คือ C ++ ไม่ได้รับความนิยมเสมอไปดูเหมือนว่าจะเป็นที่นิยมในปัจจุบันเนื่องจากมีประวัติการอัปเดต สำหรับครึ่งศตวรรษที่น้อยกว่า C ++ ไม่ได้ใช้งานมัลติเธรดด้วยซ้ำซึ่งทุกวันนี้ Python กลายเป็นเซสพูลของรหัสกาวบั๊กกี้ที่ไร้ประโยชน์ เร็วขึ้นเล็กน้อยและตอนนี้เรากำลังเห็นการเพิ่มขึ้นของการเขียนโปรแกรมเชิงฟังก์ชันมันเหมือนดัดแปลงหรือตายมากขึ้น ฉันคิดว่า Java มีสิทธิ์เท่าที่เกี่ยวข้องกับส่วนดัดแปลง
Scheme ได้รับการออกแบบมาเพื่อลดความซับซ้อนของภาษา Lisp นั่นเป็นเพียงจุดประสงค์เดียวยกเว้นว่าจะไม่เคยติดมาก่อน ฉันคิดว่า Clojure ทำสิ่งที่คล้ายกันเพื่อลดความซับซ้อนของ Scheme สำหรับ JVM ไม่มีอะไรมาก มันเหมือนกับภาษา JVM อื่น ๆ ที่มีเพื่อเพิ่มประสบการณ์ผู้ใช้เพียงเพื่อลดความซับซ้อนในการเขียนแบบสำเร็จรูปในดินแดน Java