3 สิ่งสุดเจ๋งใน Lisp
(black7375.tistory.com)ได้รับแรงบันดาลใจจากโพสต์ถูกใจของทีม Racket
ขอแนะนำส่วนที่ถูกนำไปใช้อย่างก้าวหน้าในตระกูลภาษา Lisp เหล่านี้
- แมโครที่ทรงพลังและปลอดภัยที่สุดของ Racket
1.1 แมโครที่ปลอดภัย
- C vs Racket: ทำไมแมโครจึงต้องเป็นไวยากรณ์
- Common Lisp vs Racket: ทำไมจึงต้องเป็นแมโครแบบ hygienic
1.2 แมโครที่ทรงพลัง
- ภาพรวมของ Transform โดยใช้วัตถุ Syntax
- การจัดการวัตถุ Syntax และลิสต์
- ลองทำ Transform ด้วยตัวเองโดยใช้define-syntax
- เขียนแบบประกาศด้วยแมโคร pattern matching
- compile time และ runtime ตอนนิยามแมโคร
- แมโครที่นิยามฟังก์ชันหรือตัวแปร - dynamic binding ที่ทำงานร่วมกับ Thread ของ Racket
2.1 dynamic binding คืออะไร?
2.2 ทำไมต้อง dynamic binding?
- ป้องกันการปนเปื้อนระดับ global ที่ไม่จำเป็นจากตัวแปร global
- ลบพารามิเตอร์ที่ไม่จำเป็นออกจาก context
- ลด boilerplate ที่ไม่จำเป็นในการฉีด dependency
2.3 dynamic binding ที่ปลอดภัยต่อ Thread - ระบบเชิงวัตถุที่มีความ dynamic และยืดหยุ่นของ Common Lisp
3.1 การทำ object-oriented ได้หลากหลายแบบ
3.2 ระบบเมธอดที่ยืดหยุ่น
- เมธอดที่ขยายต่อได้โดยไม่ต้องแก้ไขการนิยามคลาส
- multiple dispatch ตามชนิดของอ็อบเจ็กต์
- method combination เพื่อควบคุม cross-cutting concerns
3.3 อ็อบเจ็กต์แบบ dynamic
3.4 MOP (Meta-Object Protocol) ที่ขยายระบบเชิงวัตถุ
- ตัวนับที่ลองควบคุมสถานะตอนสร้าง
- ตัวตรวจสอบชนิดที่ลองขยายความสามารถเดิม
- ลองตรวจสอบค่าด้วยการเพิ่มคีย์เวิร์ดในนิยามคลาส
3.5 การสืบทอดหลายทาง
- ปัญหาการสืบทอดหลายทางของ C++
- กฎ CPL (Class Precedence List)
5 ความคิดเห็น
ไว้ตอนหลังเวลาเรียนค่อยต้องมาอ่านให้ได้เลย!!
ขอบคุณครับ!! 555
อยากรู้ว่าทำไมคุณถึงหลงเสน่ห์ของ racket ท่ามกลาง dialect มากมายได้ครับ!
ฉันได้รู้จักมันตอนที่กำลังศึกษา HtDP(How to Design Programs) ซึ่งเป็นเวอร์ชันที่ง่ายกว่าของ SICP
ไวยากรณ์ดูสะอาดตาและออกแบบมาได้ดีมาก
พอเริ่มสนใจแล้วลองดูนั่นดูนี่ ก็พบว่าส่วนที่ออกแบบมาอย่างดีมีมากกว่าที่คิด..
ขอบคุณครับ! มีหนังสือแบบนั้นด้วยสินะ