cond
في Scheme، يُستخدم الشرط cond لاختيار إحدى عدة كتل محتملة من التعليمات البرمجية للتنفيذ، بناءً على اختبارات متعددة. يشبه if متعدد الفروع، حيث يُفحص كل فرع بالترتيب حتى يُعثر على تطابق.
بناء الجملة
(cond
(test-1 consequent-1)
(test-2 consequent-2)
...
(else fallback-consequent))- يُقيَّم كل اختبار حسب ترتيب كتابته.
- عندما يُقيَّم اختبار إلى true (
#t)، تُنفَّذ consequent المقابلة له، ويتوقف تعبيرcondعن تقييم المزيد من الاختبارات. - جملة
elseاختيارية وتعمل كبديل إذا لم يُقيَّم أي اختبار إلى true.
كيف يعمل
اختبار كل شرط:
- يُقيّم
condالاختبارات بالترتيب الذي وُضعت به.
- يُقيّم
تنفيذ consequent المطابقة:
- عند العثور على أول اختبار يُقيَّم إلى true (
#t)، تُنفَّذ consequent الخاصة به. - إذا لم يُقيَّم أي اختبار إلى true وكانت هناك جملة
else، تُنفَّذ fallback-consequent.
- عند العثور على أول اختبار يُقيَّم إلى true (
أمثلة
مثال 1: consequents من تعبير واحد
(cond
((< 3 2) "This won't run")
((= 3 3) "This will run")
(else "Fallback"))- الاختبار الأول
(< 3 2)يُقيَّم إلى false (#f). - الاختبار الثاني
(= 3 3)يُقيَّم إلى true (#t)، لذا تُرجع"This will run". - لم تُنفَّذ جملة
elseلأنه وُجد تطابق بالفعل.
النتيجة: “This will run”
مثال 2: إجراءات متعددة باستخدام begin
عندما تتضمن consequent إجراءات متعددة، استخدم begin لتجميعها:
(cond
((< 5 3)
(begin
(lumi-message "This won't run")
(* 2 3)))
((> 5 3)
(begin
(lumi-message "Condition met")
(* 5 5)))
(else
(begin
(lumi-message "Fallback")
0)))- الاختبار الأول
(< 5 3)يُقيَّم إلى false (#f). - الاختبار الثاني
(> 5 3)يُقيَّم إلى true (#t):- يطبع
"Condition met". - ثم يحسب
(* 5 5)ويُرجع25.
- يطبع
النتيجة: تطبع « Condition met » وتُرجع 25.
مثال 3: استخدام كتلة let في consequent
عندما تحتاج إلى متغيرات محلية، استخدم كتلة let:
(cond
;; الحالة 1: إذا كان 0 أقل من -1
((< 0 -1)
(let ((x 10))
(* x x)))
;; الحالة 2: إذا كان 0 أكبر من -1
((> 0 -1)
(let ((y 20))
(lumi-message "Positive condition met")
(+ y y)))
;; الحالة الافتراضية: إذا لم يتحقق أي من الشروط أعلاه
(else
(let ((z 0))
z)))- الاختبار الأول
(< 0 -1)خاطئ. - الاختبار الثاني
(> 0 -1)صحيح، لذا:- تُنفَّذ كتلة
let، ويرتبطyبـ20. - يطبع
"Positive condition met". - ثم يحسب
(+ y y)ويُرجع40.
- تُنفَّذ كتلة
النتيجة: تطبع « Positive condition met » وتُرجع 40.
مثال 4: الاحتياط باستخدام else
(cond
((< 5 3) "This won't run")
((= 5 3) "This won't run either")
(else "Fallback value"))- لم يُقيَّم أي من الاختبارين الأولين إلى true.
- تُنفَّذ جملة
elseوتُرجع"Fallback value".
النتيجة: “Fallback value”
ملخص
- استخدم
condللتعامل مع شروط متعددة بطريقة واضحة وموجزة. - يمكن أن تكون consequents تعبيرات فردية أو إجراءات مجمّعة باستخدام
begin. - استخدم
letفي consequents للإعلان عن متغيرات محلية للعمليات الحسابية. - ضمّن دائمًا جملة
elseكاحتياط للتعامل مع الحالات غير المتوقعة.
هذه المرونة تجعل cond أداة قوية وسهلة القراءة للتعامل مع منطق التفرّع المعقد.