สัญลักษณ์
สัญลักษณ์เป็นหนึ่งในประเภทข้อมูลหลักใน Scheme ซึ่งแสดงถึงตัวระบุที่ไม่ซ้ำใครและไม่เปลี่ยนรูป พวกมันถูกใช้เป็นคีย์ มาร์กเกอร์ หรือตัวยึดตำแหน่งในโปรแกรมเป็นหลัก ทำให้จำเป็นสำหรับการเขียนโค้ดที่ชัดเจนและชัดเจน
สัญลักษณ์ใน Scheme คล้ายกับสตริง แต่ต่างกันตรงที่สัญลักษณ์เป็นแบบ ไม่ซ้ำกัน และ อะตอมมิก ซึ่งหมายความว่าสัญลักษณ์สองตัวที่มีชื่อเดียวกันรับประกันว่าเป็นออบเจ็กต์เดียวกัน ช่วยให้ตรวจสอบความเท่าเทียมกันได้อย่างรวดเร็วและใช้งานอย่างมีประสิทธิภาพในโครงสร้างข้อมูล
ไวยากรณ์
สัญลักษณ์เขียนเป็นลำดับอักขระ:
- ขึ้นต้นด้วยตัวอักษร ตามด้วยตัวอักษร ตัวเลข หรืออักขระพิเศษ เช่น
-,+หรือ* - สัญลักษณ์ต้องตรงตามตัวพิมพ์เล็กและตัวพิมพ์ใหญ่โดยค่าเริ่มต้น
ตัวอย่าง:
'hello ; A symbol named `hello`
'foo-bar ; A symbol named `foo-bar`
'*special* ; A symbol named `*special*`การสร้างสัญลักษณ์
โดยทั่วไปสัญลักษณ์จะถูกสร้างขึ้นโดยใช้ตัวดำเนินการ quote (') ซึ่งบอกให้ Scheme ถือว่าชื่อเป็นสัญลักษณ์แทนที่จะประเมินว่าเป็นตัวแปรหรือฟังก์ชัน
ตัวอย่าง
'my-symbol ; Creates the symbol `my-symbol`คุณยังสามารถสร้างสัญลักษณ์โดยทางโปรแกรมโดยใช้ขั้นตอน string->symbol ซึ่งจะแปลงสตริงเป็นสัญลักษณ์
(string->symbol "dynamic-symbol")ผลลัพธ์: 'dynamic-symbol
การเปรียบเทียบสัญลักษณ์
เนื่องจากสัญลักษณ์มีเอกลักษณ์เฉพาะตัว คุณจึงสามารถเปรียบเทียบได้อย่างมีประสิทธิภาพโดยใช้ eq?
ตัวอย่าง
(eq? 'apple 'apple) ; #t (same symbol)
(eq? 'apple 'orange) ; #f (different symbols)ทำให้สัญลักษณ์เหมาะสำหรับใช้เป็นคีย์ในโครงสร้างข้อมูลหรือเครื่องหมายในโค้ดของคุณ
การใช้สัญลักษณ์
สัญลักษณ์มักใช้ใน Scheme เพื่อ:
- คีย์ในรายการสมาคม:
(define alist '((name . "Alice") (age . 30) (city . "Paris")))
(assoc 'name alist) ; Returns (name . "Alice")- ตัวระบุในรหัส:
(define my-symbol 'foo)
(if (eq? my-symbol 'foo)
"It's foo!"
"It's something else.")ขั้นตอนการทำงานกับสัญลักษณ์
Scheme จัดเตรียมขั้นตอนในตัวสำหรับการทำงานกับสัญลักษณ์:
| ขั้นตอน | คำอธิบาย |
|---|---|
symbol? | ตรวจสอบว่าวัตถุเป็นสัญลักษณ์หรือไม่ |
eq? | เปรียบเทียบสองสัญลักษณ์เพื่อระบุตัวตน (การเปรียบเทียบอย่างรวดเร็ว) |
symbol->string | แปลงสัญลักษณ์เป็นสตริง (มีประโยชน์สำหรับการแสดงผลหรือการดีบัก) |
string->symbol | แปลงสตริงเป็นสัญลักษณ์ (มีประโยชน์สำหรับการสร้างตัวระบุแบบไดนามิก) |
ตัวอย่าง
(symbol? 'example) ; #t (true: it's a symbol)
(symbol->string 'example) ; "example"
(string->symbol "new-symbol") ; 'new-symbolสรุป
สัญลักษณ์เป็นวิธีที่ไม่ซับซ้อนและมีประสิทธิภาพในการแสดงตัวระบุ คีย์ และเครื่องหมายใน Scheme ความไม่เปลี่ยนรูปและการตรวจสอบตัวตนที่รวดเร็วทำให้เหมาะสำหรับงานการเขียนโปรแกรมหลายอย่าง การทำความเข้าใจวิธีใช้สัญลักษณ์อย่างมีประสิทธิภาพจะช่วยเพิ่มความสามารถในการเขียนโค้ด Scheme ที่ชัดเจนและแสดงออกได้ชัดเจน