مطابقة أنماط
المحتويات
في البداية، مطابقة الأنماط هي آلية في علم الحاسوب ولغات البرمجة تفحص قيمة أو بنية بيانات، ثم تقارنها ببنية محددة تسمى نمطًا. يحدد النمط شكل القيمة المطلوب. تنجح المطابقة عندما توافق القيمة ذلك الشكل. وتستعمل المطابقة عند النجاح لاستخراج أجزاء من القيمة، أو اختيار فرع تنفيذي، أو إجراء تحويل على البيانات. وفيما يلي تفاصيل أوسع عن ذلك.
علاوةً على ذلك، تستعمل البرمجة الوظيفية مطابقة الأنماط استعمالًا واسعًا، خصوصًا مع القوائم، والأشجار، وأنواع البيانات المركبة. وتستعملها كذلك لغات متعددة الأنماط مثل هاسكل، وبايثون، ورست، وسكالا، وسي شارب.
كذلك، تختلف مطابقة الأنماط عن تمييز الأنماط. يعالج تمييز الأنماط الصور أو الأصوات أو الإشارات غالبًا عبر نماذج إحصائية أو خوارزميات تعلم الآلة. أما مطابقة الأنماط في البرمجة، فتعالج شكلًا صريحًا داخل قيمة برمجية، وتنتج عادة نجاحًا أو فشلًا.
القيمة المفحوصة
ومن جهة أخرى، تمثل القيمة التي تدخل إلى عملية المطابقة، مثل عدد، أو سلسلة محارف، أو قائمة، أو شجرة، أو سجل.
مطابقة السلاسل والتعابير الرمزية
وفي هذا الصدد، أما التعابير الرمزية، فتعمل كأشجار لا كسطور نصية. تمثل العملية رأس الشجرة. وتمثل الوسائط فروعها. تفحص الآلة الرأس أولًا. ثم تفحص الوسائط. ثم تختار التعابير التي توافق النمط.
في هذا الإطار، تستعمل التعبيرات النمطية لوصف هذه الأنماط النصية. يصف التعبير النمطي حرفًا، أو رقمًا، أو تكرارًا، أو بداية سطر، أو نهاية سطر. لذلك تستعمله محررات النصوص وأدوات البحث والاستبدال ولغات البرمجة.
ومن جهة أخرى، في لغة وولفرام أو ماثماتيكا، تستعمل الدالة Cases لاختيار العناصر التي توافق نمطًا معينًا.
من جهة ثانية، تعمل مطابقة السلاسل كآلة تمر على النص حرفًا بعد حرف. تستقبل الآلة نصًا. تستقبل نمطًا. تبدأ من موضع في النص. تقارن الحروف بالنمط. إذا وافقت الحروف، تعطي موضع المطابقة أو الجزء المطابق. وإذا خالفت، تتحرك إلى موضع آخر.
نظام الأنواع
- شجرة (بنية بيانات)
- مترجم (حوسبة)
- سنوبول
- برولوغ
النمط المهمل
من جهة ثانية، يعمل النمط المهمل مثل فتحة تمر منها القيمة دون تخزين. يطابق أي شيء، لكنه لا يعطيه اسمًا. يستعمله البرنامج عندما يحتاج إلى جزء واحد من البنية، ويريد ترك باقي الأجزاء.head (x:_) = xتدخل قائمة إلى الدالة. يفحص النمط هل للقائمة رأس وبقية. يربط الرأس بالاسم x. يترك البقية داخل الرمز _. تعيد الدالة الرأس فقط. تعمل الآلة هنا كملقط يمسك أول قطعة ويترك باقي القطع.
الحارس
ومن جهة أخرى، يمثل شرطًا منطقيًا إضافيًا يفحص بعد نجاح المطابقة البنيوية. يقبل النظام الفرع إذا تحقق الشرط.
الأنواع الأساسية
كذلك، تعمل أنواع الأنماط مثل قطع مختلفة داخل آلة واحدة. تستقبل كل قطعة قيمة. تفحص شكلًا محددًا. تعطي نتيجة واضحة: تطابق أو انتقال إلى القطعة التالية.
التاريخ
وفي هذا الصدد، استعملت برولوغ آليات قريبة عبر التوحيد المنطقي. ثم جعلت لغات عائلة أم أل مطابقة الأنماط جزءًا أساسيًا من البرمجة الوظيفية. انتقلت الفكرة فيما بعد إلى لغات حديثة مثل رست وبايثون وسي شارب.
من جانب آخر، حافظت الفكرة في كل هذه المراحل على ترتيبها الآلي نفسه: تدخل قيمة، يدخل نمط، يقع الفحص، تستخرج الأجزاء، ثم ينفذ البرنامج الفرع المناسب.
وفي هذا الصدد، بدأت مطابقة الأنماط كأداة لمعالجة الرموز والنصوص. ظهرت سنوبول في ستينيات القرن العشرين لغة تهتم بالسلاسل والأنماط. كانت الفكرة العملية بسيطة: أدخل نصًا أو رمزًا، ثم افحص هل يوافق شكلًا معينًا، ثم نفذ إجراءً عند التوافق.
- انظر كذلك
- تعبير نمطي
- تمييز الأنماط
- برمجة وظيفية
- لغة برمجة
- بنية بيانات
الارتباط
من جهة ثانية، يربط اسمًا بجزء من القيمة المطابقة. يستعمل الفرع التنفيذي هذا الاسم بعد نجاح المطابقة.
النمط المركب
وعلى صعيد آخر، يوضح المثال الآتي نوعًا مركبًا في هاسكل:data Color = ColorConstructor Integer Stringتتكون القيمة هنا من مُنشئ اسمه ColorConstructor. يحمل هذا المُنشئ عددًا صحيحًا وسلسلة محارف. يستطيع النمط فتح هذه القيمة واستخراج جزء واحد منها.integerPart (ColorConstructor n _) = nتدخل قيمة من النوع Color. يفحص البرنامج هل تبدأ القيمة بالمُنشئ ColorConstructor. إذا وافق الشكل، يأخذ البرنامج العدد. يربط العدد بالاسم n. يترك السلسلة لأن الرمز _ يهملها. تعيد الدالة العدد.
إضافةً إلى ذلك، يفحص النمط المركب قيمة مكونة من أجزاء. يعمل مثل آلة تفتح صندوقًا داخله خانات. تفحص الآلة شكل الصندوق أولًا. ثم تفتح الخانات الداخلية. ثم تأخذ الخانة المطلوبة وتترك الخانات الأخرى.
النمط الحرفي
من جهة ثانية، في هاسكل:f 0 = 1تستقبل الدالة قيمة. تفحص الآلة أولًا: هل القيمة هي 0؟ إذا كانت القيمة صفرًا، ترجع الدالة 1. إذا كانت القيمة مختلفة، تبحث الدالة عن نمط آخر.
علاوةً على ذلك، يفحص النمط الحرفي قيمة واحدة بعينها. يعمل مثل مفتاح لا يفتح إلا قفلًا واحدًا. إذا دخلت القيمة المطلوبة، نجح النمط. وإذا دخلت قيمة أخرى، انتقل البرنامج إلى حالة أخرى.
مطابقة القوائم والأشجار
من جهة ثانية، وتعمل مطابقة الأشجار بطريقة أعمق. تبدأ الآلة من العقدة العليا. تفحص اسم العقدة. تنتقل إلى الفروع. تفحص كل فرع. تستخرج القيم من المواضع المطلوبة. لذلك تصلح مطابقة الأشجار في المترجمات عند قراءة شجرات النحو المجردة، وتصلح في أنظمة الجبر الحاسوبي عند تحويل التعابير الرمزية.
إضافةً إلى ذلك، تعمل مطابقة القوائم كآلة تفصل سلسلة من القطع. تسأل الآلة أولًا: هل القائمة فارغة؟ إذا كانت فارغة، تختار حالة الفراغ. وإذا احتوت عناصر، تفصل أول عنصر عن بقية القائمة.
ومن ناحية أخرى، في هاسكل تكتب القائمة الفارغة هكذا:[]وتكتب القائمة ذات الرأس والبقية هكذا:x:xsيمثل x أول عنصر. وتمثل xs بقية القائمة. تتحرك الآلة خطوة بعد خطوة. تأخذ الرأس. تعالج البقية. تتوقف عندما تصل إلى القائمة الفارغة.
آلية العمل
وعلى صعيد آخر، يجمع هذا الأسلوب بين ثلاث عمليات في موضع واحد: فحص البنية، واستخراج البيانات، واختيار مسار التنفيذ. لذلك يقلل الحاجة إلى شروط متداخلة عند التعامل مع بيانات مركبة.
علاوةً على ذلك، تبدأ المطابقة بقيمة مفحوصة. يقرأ البرنامج نمطًا واحدًا أو عدة أنماط مرتبة. يقارن النظام الشكل الخارجي للقيمة بالشكل الخارجي للنمط. ثم يفحص الأجزاء الداخلية. فإذا وافقت القيمة النمط، ربط النظام الأجزاء المطلوبة بأسماء، وتجاهل الأجزاء غير المطلوبة، ونفذ الفرع المرتبط بالنمط. وإذا فشلت المطابقة، انتقل النظام إلى النمط التالي.
المصطلحات
النمط
وفي السياق ذاته، يمثل وصفًا للشكل المتوقع. وقد يحتوي على قيم ثابتة، أو أسماء متغيرة، أو مواضع مهملة، أو أنماط فرعية.
الموضع المهمل
يكتب غالبًا بالرمز _. يطابق أي قيمة، لكنه لا يخزنها في اسم.
نمط المتغير
كذلك، يعمل نمط المتغير مثل صندوق يستقبل أي شيء. لا يسأل هذا النمط عن شكل خاص. يأخذ القيمة الداخلة. يضع عليها اسمًا. يسمح للبرنامج باستعمال ذلك الاسم في الخطوة التالية.f n = n * f (n - 1)تدخل قيمة إلى الدالة. يلتقطها النمط n. يحفظها البرنامج تحت هذا الاسم. يستعمل البرنامج n في الحساب. لذلك يعمل النمط هنا كذراع يلتقط القيمة ثم يمررها إلى جسم الدالة.
📝 هل في هذه المقالة خطأ؟
إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.
ما رأيك في هذه المقالة؟