วงเล็บเหลี่ยมและเครื่องหมายปีกกาใน Clojure ยังคงเป็น S-expressions หรือไม่


12

ฉันพยายามที่จะเรียนรู้ Lisp และมองดู Lisps ทั้งหมดที่นั่นและความแตกต่างของพวกเขา

ฉันเห็นว่าในการใช้งานบางส่วนของ Scheme คุณสามารถใช้วงเล็บเหลี่ยมสลับกันได้กับวงเล็บเหลี่ยมเพื่อความสะดวกในการอ่านดังนั้นเนื่องจากพวกเขาได้รับการปฏิบัติเหมือนกันฉันถือว่าพวกเขายังคงเป็นแค่

อย่างไรก็ตามใน Clojure ฉันเห็นว่ามีการใช้วงเล็บเหลี่ยมและเครื่องหมายปีกกาเพื่อแสดงชนิดข้อมูลต่าง ๆ เช่นเวกเตอร์เป็นต้น สิ่งเหล่านี้ยังคงเป็นนิพจน์ S ที่ถูกต้องหรือไม่หรือจะต้องพิจารณาว่าเป็นอะตอมหรือไม่ สิ่งนี้ "ทำลาย" แนวคิดทั้งหมดของ S-expressions หรือไม่ทำให้ Clojure กลายเป็น "ไม่บริสุทธิ์" ชัด ๆ


ในทางเทคนิค "ถ้าวงเล็บเหลี่ยมเป็น s-expressions คุณจะแสดงมันด้วยวงเล็บแทนได้อย่างไร" ไม่ใช่ส่วนหนึ่งของคำถาม แต่นั่นคือสิ่งที่ฉันอยากรู้
Qwertie

คำตอบ:


10

สัญกรณ์ตัวอักษรสำหรับเวกเตอร์และแผนที่ (เช่นวงเล็บเหลี่ยมและเครื่องหมายปีกกาหยิก) เป็นเพียงน้ำตาลแบบอ่านเวลาและสิ่งใดก็ตามที่คุณสามารถแทนด้วยเครื่องหมายนั้นก็สามารถแสดงด้วย S-expressions เป็นผลให้ไม่มีการสูญเสียพลังงานหรือความเหมือนจริงและแน่นอนมาโครผู้อ่าน (ซึ่งฉันเข้าใจว่ามีประสิทธิภาพยิ่งกว่า) มีให้ในจำนวน lisps

โปรดทราบว่า Clojure ได้จัดเตรียมกลไกสำหรับการสร้างตัวอักษร "แท็ก" แบบกำหนดเองซึ่งเหมือนกับตัวอักษรอื่น ๆ จะถูกแปลงเป็น S-expressions ก่อนที่พวกเขาจะรวบรวมและตีความ


1
อืมคำตอบของคุณทำให้ฉันคิดว่าฉันเข้าใจน้อยกว่าที่ฉันคิดว่าฉันเข้าใจเกี่ยวกับเสียงกระเพื่อม ดังนั้นสิ่งที่คุณพูด (ฉันคิดว่า) ก็คือวงเล็บเหลี่ยมและหยิกนั้นอันที่จริงแล้วไม่ใช่ S-expressions ฉันคิดว่าความคิดทั้งหมดที่มีอินพุตเสียงกระเพื่อมคือทุกอย่างเป็น S-expression ดูเหมือนว่าฉันต้องทำการขุดมากกว่านี้ก่อนที่จะกลับมาอ่านคำตอบของคุณอีกครั้ง ขอบคุณ!
mydoghasworms

ถูกต้อง - ไม่ใช่ S-expressions ไวยากรณ์เสียงกระเพื่อมเริ่มต้นด้วย S- นิพจน์ในที่ทุกอย่างที่สามารถแสดงในภาษาที่สามารถแสดงออกด้วย S- นิพจน์ แต่ไวยากรณ์ของเสียงกระเพื่อมยังไม่จบ: คอมไพเลอร์เสียงกระเพื่อมจำนวนมากมีเฟสการอ่านมาโครอย่างชัดเจนซึ่งรูปแบบพิเศษในซอร์สโค้ดจะถูกเปลี่ยนเป็น S-expressions สิ่งนี้ช่วยให้ผู้เขียนภาษาเสนอไวยากรณ์ที่เป็นมิตรกับผู้เขียนโปรแกรม สิ่งสำคัญที่ควรทราบคือเนื่องจากสิ่งที่แสดงด้วยตัวอักษรพิเศษเหล่านี้สามารถแสดงใน S-expressions ได้ดังนั้นจึงไม่มีการสูญเสียผลประโยชน์จากการรักร่วมเพศ
tvachon

3

S-expressions เป็นการแสดงข้อความสำหรับข้อมูล ตัวเลข, สัญลักษณ์, เซลล์ข้อเสีย, รายการ, สตริง, ... Common Lisp ยังมีการแสดงข้อความสำหรับอาร์เรย์, เวกเตอร์, ประเภทตัวเลขจำนวนมาก, ตัวอักษร, ... Common Lisp ยังมีตัวอ่านที่ขยายได้โดยผู้ใช้เพื่อให้ผู้ใช้สามารถเพิ่ม การเป็นตัวแทนข้อความเพิ่มเติมสำหรับประเภทข้อมูล บางครั้งกลไกนี้ยังใช้เพื่อแก้ไขไวยากรณ์ของภาษาการเขียนโปรแกรม Lisp (เช่นเพื่อสนับสนุนการแสดงออกของ infix หรือคำสั่งจากภาษาโปรแกรมอื่น ๆ )

ดังนั้นหากภาษา Lisp เสนอการแสดงข้อความสำหรับชนิดข้อมูลเพิ่มเติมสิ่งนี้เหมาะกับแนวคิดของ s-expressions

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