سنتابع في هذا الدرس الدوال الخاصة بالتعامل مع الأرقام.
وإليكم تعدادا ثم تفصيلا للدوال التي سنتناولها في هذا الدرس:
10- الدالة ABS
11- الدالة EVENP
12- الدالة ODDP
13- الدالة EXP
14- الدالة EXPT
15- الدالة LOG
16- الدالة GCD
17- الدالة GCD
18- الدالة INCF
19- الدالة DECF
والآن سنفصل في الحديث عن وظيفة وماهية كل دالة وطريقة كتابتها مع التزويد بأمثلة وأكواد متعددة للتوضيح والترسيخ..
10- الدالة ABS
الوظيفة:
تقوم هذه الدالة بإعادة القيمة المطلقة Absolute Value للرقم المعطى لها أيا كان نوعه.
الشكل:
(abs number)
أمثلة:

11- الدالة EVENP
الوظيفة:
تقوم هذه الدالة باختبار الرقم الصحيح المعطى لها وتعود بالقيمة True (T) إذا كان الرقم زوجي، وتعود بالقيمة False خلاف ذلك.
الشكل:
(evenp integer)
أمثلة:

12- الدالة ODDP
الوظيفة:
تقوم هذه الدالة باختبار الرقم الصحيح المعطى لها وتعود بالقيمة True (T) إذا كان الرقم فردي، وتعود بالقيمة False خلاف ذلك.
الشكل:
(oddp integer)
أمثلة:

13- الدالة EXP
الوظيفة:
تقوم هذه الدالة بإعادة الدالة الأسية e وقيمتها تساوي 2.718281828459045 مرفوعةً إلى الرقم الذي أرسلناه للدالة (أيا كان نوعه).
الشكل:
(exp number)
أمثلة:

14- الدالة EXPT
الوظيفة:
تختلف هذه الدالة عن سابقتها في أنها تستقبل رقمين: الأول يعبر عن الأساس والثاني يعبر عن الأس أو القوة التي سيرفع لها الرقم، وستقوم بإعادة نتيجة رفع الرقم للقوة المعطاة أيا كان نوع الرقم (الأساس) وأيا كان نوع القوة (الأس).
الشكل:
(expt base-number power-number)
أمثلة:

15- الدالة LOG
الوظيفة:
تعود هذه الدالة بلوغاريتم العدد المعطى لها مع افتراض أن الأساس هو العدد الطبيعي e إذا لم نحدد لها الأساس، أما إذا قمنا بتحديد الأساس فإنها ستعود بلوغاريتم العدد لنفس الأساس المعطى. شاهد الشكل والأمثلة ليتضح ذلك أكثر.
الشكل:
(expt number [optional base])
أمثلة:

شاهد الكود التالي لتتأكد مما ذكرته في الصورة السابقة بنفسك:

16- الدالة GCD
الوظيفة:
اختصار لـgreatest-common-denominator .
تعود هذه الدالة بالقاسم المشترك الأكبر لمجموعة الأعداد الصحيحة المعطاة لها.
حالات خاصة:
الشكل:
(gcd [integer[s]])
أمثلة:

17- الدالة GCD
الوظيفة:
اختصار لـleast-common-multiple.
تعود هذه الدالة بالمضاعف المشترك الأصغر لمجموعة الأعداد المعطاة لها من أي نوع.
حالات خاصة:
-
عندما نعطي لهذه الدالة عدد واحد فإنها ستعود بالقيمة المطلقة لهذا العدد.
-
عندما لا نرسل لها أي عدد فإنها ستعود بالرقم واحد حيث يعتبر العنصر المحايد في هذه العملية.
-
عندما نرسل لها الدالة عددين كلاهما لا يساوي الصفر، فإن:
(lcm a b) == (/ (abs (* a b)) (gcd a b))
(lcm a 0) == (lcm 0 a) == 0
(lcm a b c ... z) == (lcm (lcm a b) c ... z)
الشكل:
(lcm [integer[s]])
أمثلة:

18- الدالة INCF
الوظيفة:
اختصار لـIncrement Function.
ونرسل لهذه الدالة متغير يخزن فيه الرقم الأصلي، ورقم يعبر عن مقدار الزيادة.. وتعود هذه الدالة بالرقم المخزن في المتغير مضافا إليه مقدار الزيادة المطلوبة.
الشكل:
(incf place [delta-form])
أمثلة:
في البداية سنستخدم الدالة setq لإسناد قيمة عددية ولتكن 5 إلى متغير اسمه x كالتالي:

ولتتأكد أنه تم تخزين القيمة العددية 5 في المتغير الذي أسميناه x اكتب x فقط ثم اضغط على enter:

والآن ستستطيع تطبيق الدالة incf بأشكال مختلفة على المتغير x ، مع ملاحظة أنه يجب أن يكون المتغير x معرف في نفس الـ Listener أو أن يتم عمل Evaluation له إذا كان مكتوبا في الـ Text Editor .
تابع معي هذه الأمثلة:

في المثال السابق نلاحظ أن قيمة x زادت بمقدار واحد.

في المثال السابق نلاحظ أن قيمة x زادت بمقدار 3.

في المثال السابق نلاحظ أن قيمة x زادت بمقدار 0.5 .

في المثال السابق نلاحظ أن قيمة x زادت بمقدار -0.5 .
ملاحظة هامة:
لاحظنا أنه عندما نرسل للدالة incf المتغير فقط، فان مقدار الزيادة الافتراضي هو واحد، أي أن الرقم سيزيد في هذه الحالة بمقدار واحد.
وبالتالي ستقوم الدالة incf بنفس وظيفة الدالة 1+ ، فما الفرق بينهما إذن؟
الفرق هو أننا عندما نرسل متغير للدالة 1+ فان الدالة ستعود بالمتغير مضافا إليه واحد دون أن تخزن القيمة الجديدة في المتغير. أي أن المتغير سيبقى بنفس قيمته القديمة دون تغيير.
أما عندما نرسل متغير للدالة incf فان الدالة ستعود بالرقم مضافا إليه مقدار الزيادة المطلوبة وكذا فإن القيمة الجديدة سيتم تخزينها مكان القيمة القديمة لذلك المتغير. ولتوضيح ذلك سنضرب المثال التالي:
قم بتخزين العدد 3 في المتغير K:

استخدم الدالة 1+ وسترى بأنها ستعود بالرقم 4:

ومع هذا لم تخزن القيمة الجديدة 4 في المتغير k:

أما لو استخدما الدالة incf مع المتغير k كالتالي:

فان القيمة الجديدة أربعة سيتم تخزينها في المتغير k:

19- الدالة DECF
الوظيفة:
اختصار لـDecrement Function.
تقوم هذه الدالة بالوظيفة العكسية لسابقتها، ونرسل لها متغير يخزن فيه الرقم الأصلي، ورقم يعبر عن مقدار النقصان.. وتعود هذه الدالة بالرقم المخزن في المتغير مطروحا منه المقدار المطلوب.
الشكل:
(decf place [delta-form])
أمثلة:
في البداية سنستخدم الدالة setq لإسناد قيمة عددية ولتكن 5 إلى متغير اسمه x كالتالي:

بالمثل تستطيع تطبيق الدالة decf بأشكال مختلفة على المتغير x ، مع ملاحظة أنه يجب أن يكون المتغير x معرف في نفس الـ Listener أو أن يتم عمل Evaluation له إذا كان مكتوبا في الـ Text Editor .
تابع معي هذه الأمثلة:

نلاحظ أن قيمة x نقصت بمقدار واحد.

نلاحظ أن قيمة x نقصت بمقدار 2.

نلاحظ أن قيمة x نقصت بمقدار -2 أي أنها زادت بمقدار 2.

نلاحظ أن قيمة x نقصت بمقدار 0.5 .

نلاحظ أن قيمة x نقصت بمقدار -0.5 أي أنها زادت بمقدار 0.5 .
وبالمثل سنلاحظ القيمة الجديدة ستُخزن في المتغير عند استخدام الدالة decf:


بينما عندما نرسل متغير للدالة 1+ فان الدالة ستعود بالمتغير منقوصا منه واحد دون أن تخزن القيمة الجديدة في المتغير. أي أن المتغير سيبقى بنفس قيمته القديمة دون تغيير:
