مطابقة الأنماط

في علوم الحاسوب ، تُعرف مطابقة الأنماط بأنها عملية التحقق من وجود عناصر نمط معين في سلسلة معينة من الرموز . وعلى عكس التعرف على الأنماط ، يجب أن تكون المطابقة دقيقة تمامًا: "إما أن تكون مطابقة أو لا تكون". تتخذ الأنماط عادةً شكل سلاسل أو هياكل شجرية . تشمل استخدامات مطابقة الأنماط إخراج مواقع النمط (إن وجدت) ضمن سلسلة من الرموز، وإخراج أحد مكونات النمط المطابق، واستبدال النمط المطابق بسلسلة رموز أخرى (أي البحث والاستبدال ).

غالباً ما يتم وصف أنماط التسلسل (مثل سلسلة نصية) باستخدام التعبيرات النمطية ومطابقتها باستخدام تقنيات مثل التراجع .

تُستخدم أنماط الشجرة في بعض لغات البرمجة كأداة عامة لمعالجة البيانات بناءً على بنيتها، على سبيل المثال C# ، [ 1 ] F# ، [ 2 ] Haskell ، [ 3 ] Java ، [ 4 ] ML ، Python ، [ 5 ] Racket ، [ 6 ] Ruby ، [ 7 ] Rust ، [ 8 ] Scala ، [ 9 ] Swift [ 10 ] ولغة الرياضيات الرمزية Mathematica لديها صيغة خاصة للتعبير عن أنماط الشجرة وبنية لغوية للتنفيذ الشرطي واسترجاع القيم بناءً عليها.

في كثير من الأحيان، يكون من الممكن تقديم أنماط بديلة يتم تجربتها واحدة تلو الأخرى، مما ينتج عنه بنية برمجة شرطية قوية. تتضمن مطابقة الأنماط أحيانًا دعمًا للشروط . [ 11 ]

تاريخ

من بين لغات البرمجة المبكرة التي اعتمدت على بنية مطابقة الأنماط، نجد COMIT (1957) و SNOBOL (1962)، اللتين قدمتا مطابقة الأنماط كخاصية أساسية من الدرجة الأولى في اللغة لمعالجة السلاسل النصية. تطور هذا النموذج إلى تقييم البيانات الهيكلي القائم على الأشجار مع Refal (1968)، التي استخدمت مطابقة الأنماط لمعالجة التعبيرات الرمزية. وسرعان ما تم تكييف هذا المفهوم مع البرمجة المنطقية مع Prolog (1972)، حيث اتخذت مطابقة الأنماط شكل توحيد هيكلي لحل الاستعلامات المنطقية. تبنت لغات البرمجة الوظيفية هذه الخاصية بسرعة وطورتها رسميًا خلال أواخر السبعينيات وأوائل الثمانينيات، بدءًا من لغة سانت أندروز الثابتة (SASL) (1976)، و NPL (1977)، وآلة كينت الحاسبة التكرارية (KRC) (1981). [ 12 ]

ساهمت ميزة مطابقة الأنماط لوسائط الدوال في لغة ML (1973) ولهجتها Standard ML (1983) في ترسيخ التحقق الشامل أثناء الترجمة. وقد تم نقل هذا النهج إلى بعض لغات البرمجة الوظيفية الأخرى التي تأثرت بها، مثل Haskell (1990) و Scala (2004) و F# (2005). وقد تبعت لغات مثل OCaml (1996) و F# (2005) و F* (2011) و Rust (2015) بنية مطابقة الأنماط باستخدام الكلمة matchالمفتاحية التي تم تقديمها في لهجة ML Caml (1985) . ومع مرور الوقت، بدأت لغات البرمجة متعددة الأنماط في تطبيق أنواع البيانات الجبرية ومطابقة الأنماط بشكل أصلي، وصولاً إلى التطبيقات الحديثة مثل بناء جملة Python (2021) وتحسينات مطابقة الأنماط في Java (2023). [ 13 ]match-case

تدعم العديد من محررات النصوص مطابقة الأنماط بأنواعها المختلفة لتسهيل إمكانيات البحث والاستبدال المتقدمة. وكان محرر QED ، الذي صممه كين تومسون ، رائدًا في دعم البحث باستخدام التعابير النمطية. وقد أرست آلية تحليل التعابير النمطية التي وضعها تومسون في QED الأساس لأدوات البحث النصي في ed و sed و grep . علاوة على ذلك، دعمت بعض إصدارات محرر TECO ميزات مطابقة متقدمة، بما في ذلك عامل التشغيل المنطقي OR في عمليات البحث. [ 14 ]

تدعم أنظمة الجبر الحاسوبي (CAS) عمومًا مطابقة الأنماط على التعبيرات الجبرية لتحقيق التبسيط والتكامل الرمزي. استخدمت الأنظمة المبكرة مثل Macsyma (1968) مطابقة الأنماط الدلالية للتعرف على التكافؤ الجبري ؛ فعلى سبيل المثال، كان محركها الداخلي قادرًا على مطابقة كل من و بنجاح كحالات لنمط "معادلة تربيعية في x". تعتمد أنظمة الجبر الحاسوبي الحديثة، بما في ذلك Mathematica و Maple ، بشكل كبير على قواعد مطابقة الأنماط لتحويل تعبيرات المستخدم، وإيجاد حلول تحليلية للمعادلات التفاضلية ، وبناء أطر تبسيط يحددها المستخدم. [ 15 ]3x2 + 4(x + 1)(x + 6)

مصطلحات

تتضمن مطابقة الأنماط مصطلحات متخصصة.

المطابقة
عملية مقارنة عنصر مدروس بنمط (أو مجموعة أنماط)، مع إمكانية اختيار استمرارية ، أو استخراج روابط ، أو إجراء استبدال ، أو أي مزيج من هذه العمليات. تُعرف أيضاً باسم تفكيك البنية .
نمط
تتضمن هذه اللغة وصفًا لبنية البيانات المتوقعة في العنصر المراد فحصه ، بالإضافة إلى تحديد أجزاء من هذا العنصر المراد استخراجها ( الروابط ) أو تجاهلها ( الأحرف البديلة ). ويمكن أن تكون لغات الأنماط غنية؛ انظر أدناه للمصطلحات التي تدل على أنواع محددة من الأنماط.
المُدقَّق
القيمة المراد فحصها ومطابقتها مع نمط معين. في معظم الحالات، ستكون هذه القيمة عبارة عن بنية بيانات من نوع ما، بنوع مزدوج للنمط المطبق. تُعرف أيضًا باسم القيمة المستهدفة أو القيمة المميزة .
استمرار
في بعض اللغات، عند تطبيق أنماط بديلة متعددة على عنصر مدروس، وعندما يتطابق أحد هذه الأنماط، يتم تنفيذ جزء من التعليمات البرمجية المرتبط به في بيئة موسعة بروابط النمط المطابق . هذا الجزء من التعليمات البرمجية هو استمرار مرتبط بالنمط.
الاستبدال
استبدال جزء من بنية بيانات العنصر الخاضع للفحص بقيمة محسوبة. قد يعتمد الحساب على الجزء المستبدل من العنصر الخاضع للفحص، بالإضافة إلى روابط أخرى مستخرجة منه.

مصطلحات الأنماط

في حين أن بعض المفاهيم شائعة نسبياً في العديد من لغات الأنماط، فإن لغات الأنماط الأخرى تتضمن امتدادات فريدة أو غير عادية.

ملزم
طريقة لربط اسم بجزء من الكائن المراد فحصه، بحيث يكون الاسم مرتبطًا بذلك الجزء عند تنفيذ الاستمرار. على سبيل المثال، في لغة Rust، يتوقع أن يكون زوجًا، و و هما رابطان يُدخلان متغيرات من نفس الاسم في نطاق الاستمرار (" ").matchv{(a,b)=>...}vab...
بطاقة جامحة
يُكتب نمط الأحرف البديلة عادةً على شكل شرطة سفلية واحدة، _ويقبل جميع القيم دون فحصها، متجاهلاً بنيتها. يُعرف أيضاً باسم " التجاهل " أو " النمط البديل" أو " نمط التجميع" أو " الحفرة" .
يحمي
الشرط هو تعبير يجب أن ينجح (أو يُنتج قيمة منطقية صحيحة) كخطوة أخيرة قبل اعتبار النمط مطابقًا بنجاح. في بعض اللغات (مثل إرلانج )، تُكتب الشروط باستخدام مجموعة فرعية محدودة من اللغة الكاملة؛ بينما في لغات أخرى (مثل هاسكل )، قد تستخدم الشروط اللغة الكاملة.
مسند
تسمح بعض لغات تصميم الأنماط بتضمين دوال شرطية مُعرَّفة من قِبل المستخدم ضمن النمط. يُطبَّق الشرط على الجزء من العنصر المراد فحصه، والذي يُطابق موضع الشرط في النمط؛ فإذا كانت قيمة الشرط خاطئة (قيمة منطقية)، يُعتبر النمط فاشلاً. على سبيل المثال، في لغة Racket، يتوقع النمط أولاً قائمة، ثم يُطبِّق الشرط على كل عنصر؛ وبالتالي، ينجح النمط ككل فقط عندما تكون قائمة العناصر المراد فحصها قائمةً من الأعداد الزوجية.(list(?even?)...)even?
نمط العرض
تتضمن لغات مثل هاسكل [ 16 ] وراكيت [ 17 ] أنماط العرض ، حيث تقوم دالة معرفة من قبل المستخدم بتحويل جزء من الكائن المراد فحصه، والذي يتوافق مع موضع نمط العرض، قبل استكمال عملية المطابقة. تُعمم أنماط العرض أنماط المسند، مما يسمح بمزيد من المطابقة بناءً على نتيجة الدالة بدلاً من مجرد توقع قيمة منطقية.
قيد
تسمح بعض لغات الأنماط بالمقارنة المباشرة لأجزاء من العنصر المراد فحصه مع هياكل البيانات المحسوبة مسبقًا (أو الثابتة). على سبيل المثال، يقارن النمط في لغة Racket القيمة بنتيجة تقييم . في لغة Erlang، يؤدي ذكر أي متغير موجود بالفعل في نطاق النمط إلى جعله يعمل كقيد بهذه الطريقة (بدلاً من كونه ربطًا).(==expr)expr
نمط حرفي؛ نمط ذري
تُسمى الأنماط التي تتطابق مع البيانات الذرية البسيطة مثل 123أو الأنماط الحرفية ."hello"
نمط مركب
تُسمى الأنماط التي تقوم بتفكيك القيم المركبة مثل القوائم، وجداول التجزئة، والصفوف، والهياكل، أو السجلات، مع أنماط فرعية لكل قيمة من القيم التي تشكل بنية البيانات المركبة، بالأنماط المركبة .
بديل ( orنمط)
تسمح العديد من لغات البرمجة بوجود بدائل متعددة على المستوى الأعلى لبنية مطابقة الأنماط، ويرتبط كل بديل منها باستمرارية ؛ كما تسمح بعض اللغات بوجود بدائل داخل النمط نفسه. وفي معظم الحالات، تخضع هذه البدائل لقيود إضافية: على سبيل المثال، قد يُطلب من كل بديل إنتاج نفس مجموعة الروابط (بنفس الأنواع).
وحدات الماكرو
تسمح بعض اللغات باستخدام وحدات الماكرو في سياق الأنماط للسماح بتجريد الأنماط. على سبيل المثال، في لغة Racket، تؤدي موسعات المطابقة هذا الدور. [ 18 ]

الأنواع

الأنماط البدائية

أبسط نمط في مطابقة الأنماط هو القيمة الصريحة أو المتغير. على سبيل المثال، لنأخذ تعريف دالة بسيط في لغة هاسكل (معاملات الدالة ليست بين قوسين ولكن مفصولة بمسافات، وعلامة = ليست تعيينًا بل تعريفًا):

f 0 = 1

هنا، يُمثل الصفر نمطًا ذا قيمة واحدة. الآن، عندما تُمرر القيمة صفر كمعامل للدالة f، يتطابق النمط وتُرجع الدالة القيمة 1. مع أي معامل آخر، يفشل التطابق، وبالتالي تفشل الدالة. بما أن الصيغة تدعم أنماطًا بديلة في تعريفات الدوال، يُمكننا مواصلة التعريف وتوسيعه ليشمل معاملات أكثر عمومية.

f n = n * f ( n - 1 )

هنا، النمط الأول nهو نمط متغير واحد، يطابق أي وسيط ويربطه بالاسم n لاستخدامه في بقية التعريف. في لغة هاسكل (على عكس لغة هوب على الأقل )، تُجرَّب الأنماط بالتسلسل، لذا يظل التعريف الأول ساريًا في حالة إدخال القيمة 0 تحديدًا، بينما تُعيد الدالة القيمة n لأي وسيط آخر n * f (n-1).

نمط الأحرف البديلة (الذي يُكتب غالبًا على النحو التالي _) بسيط أيضًا: فهو يُطابق أي قيمة، مثل اسم المتغير، ولكنه لا يربط القيمة بأي اسم. وقد طُوّرت خوارزميات لمطابقة الأحرف البديلة في حالات مطابقة السلاسل النصية البسيطة، وذلك في عدد من الأنواع التكرارية وغير التكرارية. [ 19 ]

أنماط الأشجار

يمكن بناء أنماط أكثر تعقيدًا من الأنماط الأولية المذكورة في القسم السابق، عادةً بنفس طريقة بناء القيم من خلال دمج قيم أخرى. ويكمن الاختلاف إذًا في أنه مع الأجزاء المتغيرة والعناصر البديلة، لا يُبنى النمط على قيمة واحدة، بل يُطابق مجموعة من القيم التي تُمثل مزيجًا من العناصر الملموسة والعناصر المسموح لها بالتغير ضمن بنية النمط.

يصف نمط الشجرة جزءًا من شجرة بالبدء بعقدة وتحديد بعض الفروع والعقد، وترك بعضها الآخر غير محدد باستخدام متغير أو نمط عام. قد يكون من المفيد التفكير في شجرة بناء الجملة المجردة للغة برمجة وأنواع البيانات الجبرية .

هاسكل

في لغة هاسكل، يحدد السطر التالي نوع بيانات جبرية Colorيحتوي على مُنشئ بيانات واحد ColorConstructorيغلف عددًا صحيحًا وسلسلة نصية.

بيانات اللون = مُنشئ اللون عدد صحيح سلسلة نصية

الدالة البانية هي عقدة في شجرة، والعدد الصحيح والسلسلة النصية هما أوراق في الفروع.

عندما نريد كتابة دوال لإنشاء Colorنوع بيانات مجرد ، فإننا نرغب في كتابة دوال للتفاعل مع نوع البيانات، وبالتالي نريد استخراج بعض البيانات من نوع البيانات، على سبيل المثال، السلسلة فقط أو الجزء الصحيح فقط من Color.

إذا مررنا متغيرًا من نوع Color، فكيف يمكننا استخراج البيانات منه؟ على سبيل المثال، لكي تحصل دالة على الجزء الصحيح من المتغير Color، يمكننا استخدام نمط شجرة بسيط وكتابة:

integerPart ( ColorConstructor theInteger _ ) = theInteger

أيضًا:

stringPart ( ColorConstructor _ theString ) = theString

يمكن أتمتة إنشاء هذه الوظائف باستخدام صيغة سجل البيانات في لغة هاسكل .

أوكاميل

يوضح هذا المثال في لغة OCaml، الذي يُعرّف شجرة حمراء-سوداء ودالة لإعادة توازنها بعد إدخال عنصر، كيفية المطابقة على بنية أكثر تعقيدًا ناتجة عن نوع بيانات تكراري. يتحقق المُصرّف أثناء وقت الترجمة من أن قائمة الحالات شاملة ولا يوجد بها أي تكرار.

نوع اللون = أحمر | أسود نوع ' شجرة = فارغ | شجرة من اللون * ' شجرة * ' شجرة * ' شجرةlet rebalance t = match t with | Tree ( Black , Tree ( Red , Tree ( Red , a , x , b ) , y , c ) , z , d ) | Tree ( Black , Tree ( Red , a , x , Tree ( Red , b , y , c ) ) , z , d ) | Tree ( Black , a , x , Tree ( Red , Tree ( Red , b , y , Tree ( Red , c , z , d ) ) ) - > Tree ( Red , Tree ( Black , a , x , b ) , y , Tree ( Black , c , z , d ) ) | _ - > t ( * حالة " الجمع " إذا لم يتطابق أي نمط سابق * )

الاستخدام

تصفية البيانات باستخدام الأنماط

يمكن استخدام مطابقة الأنماط لتصفية البيانات ذات بنية معينة. على سبيل المثال، في لغة هاسكل، يمكن استخدام بناء القوائم لهذا النوع من التصفية:

[ A x | A x <- [ A 1 , B 1 , A 2 , B 2 ]]

يُقيّم إلى

[A 1, A 2]

مطابقة الأنماط في برنامج Mathematica

في برنامج Mathematica ، البنية الوحيدة الموجودة هي الشجرة ، والتي تتكون من رموز. في صيغة Haskell المستخدمة حتى الآن، يمكن تعريف ذلك على النحو التالي:

بيانات SymbolTree = Symbol String [ SymbolTree ]

قد تبدو شجرة مثال على ذلك كما يلي:

الرمز "أ" [ الرمز "ب" [], الرمز "ج" []]

في الصيغة التقليدية والأكثر ملاءمة، تُكتب الرموز كما هي ويتم تمثيل مستويات الشجرة باستخدام []، بحيث a[b,c]تكون على سبيل المثال شجرة مع a كأصل، و b و c كأبناء.

يتضمن النمط في برنامج Mathematica وضع علامة "_" في مواضع محددة في تلك الشجرة. على سبيل المثال، النمط

أ[_]

ستطابق هذه الدالة عناصر مثل A[1] و A[2]، أو بشكل أعم A[ x ] حيث x أي كيان. في هذه الحالة، Aيمثل العنصر المحدد، بينما _يشير إلى جزء الشجرة القابل للتغيير. _يربط الرمز المضاف إلى A[1] المطابقة باسم المتغير، بينما _يقيد الرمز المضاف إلى A[x] المطابقة بعقد ذلك الرمز. لاحظ أن الفراغات نفسها تُمثل داخليًا بـ A[1] و A[ x] على Blank[]التوالي ._Blank[x]_x

تقوم دالة Mathematica Casesبتصفية عناصر الوسيط الأول التي تتطابق مع النمط الموجود في الوسيط الثاني: [ 20 ]

Cases [{ a [ 1 ], b [ 1 ], a [ 2 ], b [ 2 ]}, a [ _ ] ]

يُقيّم إلى

{ a [ 1 ], a [ 2 ]}

ينطبق مطابقة الأنماط على بنية التعبيرات. في المثال أدناه،

Cases [ { a [ b ], a [ b , c ], a [ b [ c ], d ], a [ b [ c ], d [ e ]], a [ b [ c ], d , e ]}, a [ b [ _ ], _ ] ]

عمليات الإرجاع

{ a [ b [ c ], d ], a [ b [ c ], d [ e ]]}

لأن هذه العناصر فقط هي التي ستتطابق مع النمط a[b[_],_]أعلاه.

في برنامج Mathematica، يُمكن أيضًا استخراج البنى أثناء إنشائها خلال عملية الحساب، بغض النظر عن كيفية أو مكان ظهورها. Traceيُمكن استخدام هذه الدالة لمراقبة عملية حسابية، وإرجاع العناصر التي تُطابق نمطًا مُعينًا. على سبيل المثال، يُمكننا تعريف متتالية فيبوناتشي على النحو التالي:

فيب [ 0 | 1 ] := 1 فيب [ n_ ] := فيب [ n -1 ] + فيب [ n -2 ]

ثم يمكننا طرح السؤال التالي: بالنظر إلى fib[3]، ما هو تسلسل استدعاءات فيبوناتشي المتكررة؟

Trace [ fib [ 3 ], fib [ _ ]]

تُعيد هذه الدالة بنية تمثل حالات ظهور النمط fib[_]في البنية الحسابية:

{ اكذوبة [ 3 ]، { اكذوبة [ 2 ]، { اكذوبة [ 1 ]}، { اكذوبة [ 0 ]}}، { اكذوبة [ 1 ]}}

البرمجة التصريحية

في لغات البرمجة الرمزية، يسهل استخدام الأنماط كوسائط للدوال أو كعناصر في هياكل البيانات. ومن نتائج ذلك القدرة على استخدام الأنماط للتعبير بشكل تصريحي عن أجزاء من البيانات، ولتوجيه الدوال بمرونة حول كيفية عملها.

على سبيل المثال، يمكن استخدام دالة MathematicaCompile لإنشاء نسخ أكثر كفاءة من الكود. في المثال التالي، لا تُعدّ التفاصيل مهمةً بشكلٍ خاص؛ المهم هو أن التعبير الفرعي {{com[_], Integer}}يُشير إلى أنه يمكن افتراض أن Compileالتعبيرات من الشكل أعداد صحيحة لأغراض الترجمة:com[_]

com [ i_ ] := Binomial [ 2i , i ] Compile [{ x , { i , _Integer }}, x ^ com [ i ], {{ com [ _ ], ​​Integer } }]

صناديق البريد في لغة إرلانج تعمل بهذه الطريقة أيضًا.

تربط علاقة كاري -هوارد بين البراهين والبرامج بين مطابقة الأنماط على نمط ML وتحليل الحالات والإثبات عن طريق الاستنفاد .

مطابقة الأنماط والسلاسل

يُعدّ استخدام سلاسل الأحرف الشكل الأكثر شيوعًا لمطابقة الأنماط. في العديد من لغات البرمجة، تُستخدم صيغة معينة من السلاسل لتمثيل التعابير النمطية، وهي أنماط تصف أحرف السلسلة.

ومع ذلك، من الممكن إجراء بعض عمليات مطابقة أنماط السلاسل النصية ضمن نفس الإطار الذي تمت مناقشته في جميع أنحاء هذه المقالة.

أنماط الشجرة للسلاسل

في برنامج Mathematica، تُمثَّل السلاسل النصية على شكل أشجار، حيث يكون الجذر StringExpression، وتُعتبر جميع الأحرف بالترتيب أبناءً لهذا الجذر. لذا، لمطابقة "أي عدد من الأحرف اللاحقة"، يلزم استخدام رمز بدل جديد ___، على عكس _ الذي يطابق حرفًا واحدًا فقط.

في لغة هاسكل ولغات البرمجة الوظيفية عمومًا، تُمثَّل السلاسل النصية كقوائم وظيفية من الأحرف. تُعرَّف القائمة الوظيفية بأنها قائمة فارغة، أو عنصر مُنشأ من قائمة موجودة. في صيغة هاسكل:

[] -- قائمة فارغة x : xs -- عنصر x مُنشأ من قائمة xs

تكون بنية القائمة التي تحتوي على بعض العناصر على النحو التالي element:list. عند مطابقة الأنماط، نؤكد أن جزءًا معينًا من البيانات يساوي نمطًا معينًا. على سبيل المثال، في الدالة:

رأس ( العنصر : القائمة ) = العنصر

نؤكد أن العنصر الأول في headوسيط الدالة يُسمى العنصر، وأن الدالة تُرجعه. نعلم أن هذا هو العنصر الأول نظرًا لطريقة تعريف القوائم، حيث يُنشأ عنصر واحد فقط في القائمة. يجب أن يكون هذا العنصر هو الأول. القائمة الفارغة لا تُطابق النمط على الإطلاق، لأنها لا تحتوي على رأس (العنصر الأول الذي يُنشأ).

في المثال، ليس لدينا حاجة لـ list، لذلك يمكننا تجاهلها، وبالتالي كتابة الدالة:

head ( element : _ ) = element

يُعبّر عن التحويل المكافئ في برنامج Mathematica على النحو التالي:

head[element, ]:=element

أنماط السلاسل النصية النموذجية

في برنامج Mathematica، على سبيل المثال،

StringExpression [ "a" , _ ]

سوف يطابق سلسلة تحتوي على حرفين وتبدأ بـ "a".

النمط نفسه في لغة هاسكل:

[ 'a' , _ ]

يمكن إدخال الكيانات الرمزية لتمثيل العديد من الفئات المختلفة للخصائص ذات الصلة بالسلسلة النصية. على سبيل المثال،

StringExpression[LetterCharacter, DigitCharacter]

سوف يطابق سلسلة تتكون من حرف أولاً، ثم رقم.

في لغة هاسكل، يمكن استخدام الحراس لتحقيق نفس النتائج:

[ حرف ، رقم ] | حرف أبجدي && رقم رقم

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

سنوبول

SNOBOL ( لغة موجهة نحو السلاسل والرمزية ) هي لغة برمجة حاسوبية تم تطويرها بين عامي 1962 و 1967 في مختبرات AT&T Bell بواسطة ديفيد جيه. فاربر ، ورالف إي. جريسولد ، وإيفان بي. بولونسكي.

تتميز لغة SNOBOL4 عن معظم لغات البرمجة باحتوائها على الأنماط كنوع بيانات من الدرجة الأولى ( أي نوع بيانات يمكن التلاعب بقيمه بجميع الطرق المسموح بها لأي نوع بيانات آخر في لغة البرمجة) ، وبتوفيرها عوامل تشغيل لدمج الأنماط واستبدالها . ويمكن التعامل مع السلاسل النصية المُولّدة أثناء التنفيذ كبرامج وتنفيذها.

تم تدريس لغة SNOBOL على نطاق واسع في الجامعات الأمريكية الكبيرة في أواخر الستينيات وأوائل السبعينيات، وتم استخدامها على نطاق واسع في السبعينيات والثمانينيات كلغة لمعالجة النصوص في العلوم الإنسانية .

منذ ابتكار لغة SNOBOL، أصبحت معالجة السلاسل النصية باستخدام التعابير النمطية شائعة في لغات برمجة أحدث مثل AWK و Perl . مع ذلك، تتضمن أنماط SNOBOL4 قواعد باكوس-ناور (BNF)، وهي مكافئة لقواعد اللغة الخالية من السياق وأكثر قوة من التعابير النمطية . [ 21 ]

انظر أيضاً

مراجع

  1. "مطابقة الأنماط - دليل C#" . 13 مارس 2024.
  2. "مطابقة الأنماط - دليل F#" . 5 نوفمبر 2021.
  3. "مقدمة مبسطة إلى لغة هاسكل: الأنماط" . www.haskell.org .
  4. "مطابقة الأنماط" . مركز مساعدة أوراكل .
  5. "ما الجديد في بايثون 3.10 — وثائق بايثون 3.10.0b3" . docs.python.org . تم الاطلاع عليه بتاريخ 2021-07-06 .
  6. "مطابقة الأنماط" . docs.racket-lang.org . تم الاطلاع عليه بتاريخ 25-06-2025 .
  7. "pattern_matching - Documentation for Ruby 3.0.0" . docs.ruby-lang.org . تم الاطلاع عليه بتاريخ 2021-07-06 .
  8. "إعادة التوجيه..." doc.rust-lang.org .{{cite web}}يستخدم Cite عنوانًا عامًا ( مساعدة )
  9. "مطابقة الأنماط" . وثائق سكالا . تم الاطلاع عليه بتاريخ 17 يناير 2021 .
  10. "الوثائق" . docs.swift.org .
  11. ^ أوغسسون ، لينارت (1985)، “تجميع مطابقة الأنماط” ، في Jouannaud، Jean-Pierre (ed.)، لغات البرمجة الوظيفية وهندسة الكمبيوتر ، المجلد. 201، برلين، هايدلبرغ: سبرينغر برلين هايدلبرغ، الصفحات من 368 إلى 381، دوى : 10.1007/3-540-15975-4_48 ، ISBN   978-3-540-15975-9تم الاطلاع عليه بتاريخ 21-05-2026
  12. هندرسون، بيتر (1980). البرمجة الوظيفية: التطبيق والتنفيذ . سلسلة برنتيس هول الدولية في علوم الحاسوب. إنجلوود كليفس، نيوجيرسي: برنتيس هول الدولية. ISBN 978-0-13-331579-0.
  13. بيرس، بنجامين سي. (2002). الأنواع ولغات البرمجة . كامبريدج، ماساتشوستس: مطبعة معهد ماساتشوستس للتكنولوجيا. ISBN 978-0-262-16209-8.
  14. "https://dl.acm.org/action/cookieAbsent" . مكتبة ACM الرقمية . doi : 10.1145/363347.363387 . تاريخ الاسترجاع: 21 مايو 2026 .{{cite web}}: رابط خارجي في |title=( المساعدة )
  15. أبوستوليكو، ألبرتو؛ جاليل، تسفي، محرران. (2020). خوارزميات مطابقة الأنماط . منشورات أكسفورد الإلكترونية. نيويورك: مطبعة جامعة أكسفورد. ISBN 978-0-19-511367-9.
  16. "6.7.2. أنماط العرض — دليل مستخدم مُصرّف غلاسكو هاسكل 9.15.20250917" . ghc.gitlab.haskell.org .
  17. "9 مطابقة الأنماط" . docs.racket-lang.org .
  18. "9 مطابقة الأنماط" . docs.racket-lang.org .
  19. كانتاتوري، أليساندرو (2003). "خوارزميات مطابقة الأحرف البديلة" .
  20. "حالات - توثيق لغة وولفرام" . reference.wolfram.com . تم الاطلاع عليه بتاريخ 17-11-2020 .
  21. جيمبل، جيه إف 1973. نظرية الأنماط المنفصلة وتطبيقها في SNOBOL4. مجلة الاتصالات ACM 16، 2 (فبراير 1973)، 91-100. DOI= http://doi.acm.org/10.1145/361952.361960 .