الرموز

الرموز أحد أنواع البيانات الأساسية في Scheme، تمثل معرفات فريدة وغير قابلة للتغيير. تُستخدم أساسًا كمفاتيح أو علامات أو عناصر نائبة في البرامج، ما يجعلها ضرورية لكتابة تعليمات برمجية نظيفة ومعبرة.

الرمز في Scheme يشبه السلسلة لكنه يختلف بأن الرموز فريدة وذرية. رمزان يحملان نفس الاسم مضمونان أن يكونا نفس الكائن، ما يتيح فحوصات مساواة سريعة واستخدامًا فعّالًا في هياكل البيانات.

بناء الجملة

يُكتب الرمز كسلسلة أحرف:

  • يبدأ بحرف، يليه أحرف أو أرقام أو رموز خاصة مثل - أو + أو *.
  • الرموز حساسة لحالة الأحرف افتراضيًا.

أمثلة:

'hello       ; رمز باسم `hello`
'foo-bar     ; رمز باسم `foo-bar`
'*special*   ; رمز باسم `*special*`

إنشاء الرموز

تُنشأ الرموز عادةً بعامل quote (')، الذي يخبر Scheme بمعاملة الاسم كرمز بدل تقييمه كمتغير أو دالة.

مثال

'my-symbol   ; ينشئ الرمز `my-symbol`

يمكن أيضًا إنشاء رموز برمجيًا بـ string->symbol، الذي يحوّل سلسلة إلى رمز.

(string->symbol "dynamic-symbol")

النتيجة: 'dynamic-symbol

مقارنة الرموز

بما أن الرموز فريدة، يمكن مقارنتها بكفاءة بـ eq?.

مثال

(eq? 'apple 'apple)   ; #t (نفس الرمز)
(eq? 'apple 'orange)  ; #f (رمزان مختلفان)

هذا يجعل الرموز مثالية كمفاتيح في هياكل البيانات أو علامات في التعليمات البرمجية.

استخدام الرموز

غالبًا ما تُستخدم الرموز في Scheme من أجل:

  1. المفاتيح في alists:
(define alist '((name . "Alice") (age . 30) (city . "Paris")))
(assoc 'name alist)   ; يرجع (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 (صحيح: إنه رمز)
(symbol->string 'example)     ; "مثال"
(string->symbol "new-symbol") ; "رمز جديد."

ملخص

الرموز طريقة خفيفة وفعّالة لتمثيل المعرفات والمفاتيح والعلامات في Scheme. ثباتها والتحقق السريع من الهوية يجعلانها مثالية لمهام برمجية كثيرة. فهم استخدام الرموز بفعالية يعزّز قدرتك على كتابة تعليمات برمجية نظيفة ومعبرة.