สัญลักษณ์

สัญลักษณ์เป็นหนึ่งในประเภทข้อมูลหลักใน 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 เพื่อ:

  1. คีย์ในรายการสมาคม:
(define alist '((name . "Alice") (age . 30) (city . "Paris")))
(assoc 'name alist)   ; Returns (name . "Alice")
  1. ตัวระบุในรหัส:
   (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 ที่ชัดเจนและแสดงออกได้ชัดเจน