في هذا الدرس والدرس القادم سأتحدث بالتفصيل عن الرموز Characters في LISP ماهيتها وكيفية التعامل معها في LISP والدوال المعرفة مسبقا في اللغة للتعامل مع الرموز أو إجراء عمليات عليها.
مكونات هذا الدرس:
أولا: تعريف الرمز CHARACTER ؟
ثانيا: سلسلة الدوال المختصة بالتعامل مع الرموز وهي 14 دالة سيتم شرحها في هذا الدرس.
ثالثا: ثم سنختم الدرس بالتعرف على المتغير CHAR-CODE-LIMIT المعرف مسبقا Predefined Variable داخل اللغة، ماهيته وقيمته التي يأخذها.
وسندخل في درسنا مباشرة على بركة الله:)
أولا: ما هو الرمز Character ؟!
التعريف موجود في قاموس الموسوعة العربية على الوصلة التالية:
http://www.c4arab.com/qamoos/mean.php?word=Character
ولا يختلف هذا المفهوم للحرف أو تعميما الرمز Character بين جميع لغات البرمجة بما فيها لغتنا الجميلة LISP.
ثانيا: دوال التعامل مع الرموز Characters:
سنتناول في هذا الدرس معظم الدوال المعرفة داخل لغة LISP والمخصصة لغرض التعامل مع الرموز أو الأحرف..
وإليكم تعدادا ثم تفصيلا لجميع الدوال التي سنتناولها في هذا الدرس:
1- الدالة CHARACTER
2- الدالة CHARACTERP
3- الدالة ALPHA-CHAR-P
4- الدالة ALPHANUMERICP
5- الدالة GRAPHIC-CHAR-P
6- الدالة CHAR-UPCASE
7- الدالة CHAR-DOWNCASE
8- الدالة UPPER-CASE-P
9- الدالة LOWER-CASE-P
10- الدالة BOTH-CASE-P
11- الدالة CHAR-CODE
12- الدالة CHAR-INT
13- الدالة CODE-CHAR
14- الدالة NAME-CHAR
والآن سنفصل في الحديث عن وظيفة وماهية كل دالة وطريقة كتابتها مع التزويد بأمثلة وأكواد متعددة للتوضيح والترسيخ..
1- الدالة CHARACTER
الوظيفة:
تستقبل هذه الدالة رمز أو حرف وحيد، وتعود به مسبوقا بالعلامة # إذا لم يكن مسبوقا بها أو إذا كان مسبوقا فقط بـ .. والعلامة # تدل على أن ما وراءها هو Character.
غير ذلك فإن هذه الدالة تعود بخطأ ERROR وسنشاهد ذلك في الأمثلة.
الشكل:
(character character)
أمثلة:
عند إرسال رمزا حرفيا:

أما عندما نرسل رقما فإن رسالة الخطأ التالية ستظهر:

وكذلك عندما نرسل أكثر من حرف فإن رسالة الخطأ التالية ستظهر:

2- الدالة CHARACTERP
الوظيفة:
تعود هذه الدالة بالقيمة True (T) إذا كان الكائن المرسل لها عبارة عن رمز أو حرف وحيد ومسبوق بالعلامة #.
تعود بالقيمة False (Nil) خلاف ذلك.
الشكل:
(characterp character)
أمثلة:



فنلاحظ في الأمثلة السابقة أن LISP يتعرف على الرمز Character عندما يكون مسبوقا بالعلامة # وغير ذلك سيعود بالقيمة NIL كما رأينا.
في الأمثلة التالية ستظهر لنا رسالة خطأ لكوننا أرسلنا أكثر من رمزا في الوقت ذاته لهذه الدالة. هذه الدوال تُعنى فقط بالرمز أو الحرف فقط، أما السلسلة التي تتكون من أكثر من رمز أو حرف وقد يتخللها أرقام أيضا وهي ما تسمى بالـStrings فسيتم التعرف على دوالها في الدروس القادمة.


3- الدالة ALPHA-CHAR-P
الوظيفة:
تعود هذه الدالة بالقيمة True (T) إذا كان الكائن المرسل لها عبارة حرف Alphabetic وحيد ومسبوق بالعلامة #.
وتعود بالقيمة False (Nil) خلاف ذلك (فيما لو أرسلنا أحد الرموز أو الأرقام على سبيل المثال).
الشكل:
(alpha-char-p character)
أمثلة:

4- الدالة ALPHANUMERICP
الوظيفة:
تعود هذه الدالة بالقيمة True (T) إذا كان الكائن المرسل لها عبارة حرف Alphabetic أو عدد Numeric وحيد ومسبوق بالعلامة #.
وتعود بالقيمة False (Nil) خلاف ذلك (فيما لو أرسلنا أحد الرموز على سبيل المثال).
الشكل:
(alphanumericp character)
أمثلة:

5- الدالة GRAPHIC-CHAR-P
الوظيفة:
تعود هذه الدالة بالقيمة True (T) إذا كان الكائن المرسل لها عبارة رمز رسومي Graphic Character (أي رمز من الرموز الموجودة على لوحة المفاتيح من مثل ! @ $ % ^ & ~ وغيرها أو حرفا Alphabetic أو عددا numeric).
وتعود بالقيمة False (Nil) خلاف ذلك.
الشكل:
(graphic-char-p character)
أمثلة:

6- الدالة CHAR-UPCASE
الوظيفة:
تقوم هذه الدالة بتحويل الحرف إلى صيغة الحروف الكبيرة Capital Letters في اللغة الإنجليزية من مثل A, B, C وهكذا....
حالات خاصة:
الشكل:
(char-upcase character)
أمثلة:

7- الدالة CHAR-DOWNCASE
الوظيفة:
هذه الدالة لها عكس وظيفة الدالة السابقة، حيث تقوم بتحويل الحرف إلى صيغة الحروف الصغيرة Small Letters في اللغة الإنجليزية من مثل a, b, c وهكذا....
حالات خاصة:
الشكل:
(char-downcase character)
أمثلة:

8- الدالة UPPER-CASE-P
الوظيفة:
تعود هذه الدالة بالقيمة True (T) إذا كان الحرف المرسل لها حرف كبير Capital Letter.
وتعود بالقيمة False (Nil) خلاف ذلك، أي إذا أرسلنا حرفا صغيرا Small Letter أو رقما أو رمزا آخر.
الشكل:
(upper-case-p character)
أمثلة:

9- الدالة LOWER-CASE-P
الوظيفة:
تعود هذه الدالة بالقيمة True (T) إذا كان الحرف المرسل لها حرف صغير Small Letter.
وتعود بالقيمة False (Nil) خلاف ذلك، أي إذا أرسلنا حرفا كبيرا Capital Letter أو رقما أو رمزا آخر.
الشكل:
(lower-case-p character)
أمثلة:

10- الدالة BOTH-CASE-P
الوظيفة:
تعود هذه الدالة بالقيمة True (T) إذا أرسلنا لها حرفا Alphabetic حيث أن الحروف هي الرموز الوحيدة التي تأخذ حالتين: إما حرف صغير Small Letter أو حرف كبير Capital Letter.
وتعود بالقيمة False (Nil) خلاف ذلك، أي إذا أرسلنا أي رقم أو رمز آخر.
الشكل:
(both-case-p character)
أمثلة:

11- الدالة CHAR-CODE
الوظيفة:
تعود هذه الدالة بقيمة الكود الرقمي للرمز المرسل لها أيا كان نوعه (حرف – رقم –رمز).
الشكل:
(char-code character)
أمثلة:

12- الدالة CHAR-INT
الوظيفة:
تشبه هذه الدالة سابقتها وتعود بعدد صحيح غير سالب يمثل الشيفرة الخاصة بالرمز المرسل لها أيا كان نوعه (حرف – رقم –رمز).
تختلف هذه الدالة عن سابقتها في أن طريقة حساب الرقم الصحيح العائد من هذه الدالة يعتمد من نسخة LISP إلى أخرى.
الشكل:
(char-int character)
أمثلة:
في نسخة LISP التي لدي نجد أن:

بينما في نسخ أخرى سنجد أن الرقم العائد قد يكون:

13- الدالة CODE-CHAR
الوظيفة:
تقوم هذه الدالة بالوظيفة المعاكسة للدالة CHAR-CODE ، حيث تأخذ هذه الدالة قيمة الكود الرقمي وتعود بالرمز المقابل لهذا الرقم أيا كان نوعه (حرف – رقم –رمز).
وكما رأينا في الدالة السابقة الكود الرقمي للرموز يختلف من نسخة إلى أخرى أي أنه Implementation Dependent.
الشكل:
(code-char character)
أمثلة:

14- الدالة NAME-CHAR
الوظيفة:
هناك أسماء محجوز داخل لغة LISP تكون خاصة ببعض الرموز ، على سبيل المثال:
الاسم NewLine يكتب للدلالة على سطر جديد
والاسم Space يكتب للدلالة على المسافة البيضاء
تقوم الدالة NAME-CHAR بتحديد ما إذا كان الاسم المرسل لها محجوزا في اللغة لأحد الرموز أم لا.. فإذا كان الاسم المرسل لها محجوزا بالفعل فإنها تعود به أما إذا كان غير محجوز داخل اللغة فإنها تعود بالقيمة Nil.
الشكل:
(name-char name)
أمثلة:

وكما نلاحظ في الأمثلة السابقة فإن لغة LISP غير حساسة لحالة الأحرف فلا فرق مثلا بين أن نكتب الاسم Space أو space..
وهذا مثال متقدم نوعا ما للاستفادة من الدالة السابقة:

انتهينا من الدوال المتعلقة بالرموز.. وسنتعرف الآن على المتغير CHAR-CODE-LIMIT..
ثالثا: المتغير CHAR-CODE-LIMIT
يعتبر هذا المتغير من المتغيرات المحجوزة داخل لغة LISP (شأنه شأن المتغير PI الذي تعرفنا عليه مسبقا) وتختلف قيمته من نسخة لأخرى..
يعطي هذا المتغير أقصى قيمة للكود الرقمي الممثل للرموز وهي مختلفة من نسخة إلى أخرى، ولكن من الضروري ألاّ تقل هذه القيمة 96.
