المسارات
/
Tcl
Tcl
/
التمارين
/
عمليات القوائم
عمليات القوائم

عمليات القوائم

متوسط

التعليمات

نفّذ عمليات المصفوفة الأساسية.

في اللغات الوظيفية، تُعدّ عمليات المصفوفات مثل length وmap وreduce شائعة جدًا. نفّذ سلسلة من عمليات المصفوفة الأساسية، دون استخدام دوال موجودة.

يعتمد العدد الدقيق للعمليات المطلوب تنفيذها وأسماؤها على المسار، لتجنّب التعارض مع الأسماء الموجودة، لكن العمليات العامة التي ستنفّذها تشمل:

  • append (بإعطاء مصفوفتين، أضِف كل عناصر المصفوفة الثانية إلى نهاية المصفوفة الأولى)؛
  • concatenate (بإعطاء سلسلة من المصفوفات، ادمج كل عناصر المصفوفات كلها في مصفوفة واحدة مسطّحة)؛
  • filter (بإعطاء دالة شرطية ومصفوفة، أرجِع المصفوفة التي تضم كل العناصر التي يكون عندها predicate(item) صحيحًا)؛
  • length (بإعطاء مصفوفة، أرجِع العدد الإجمالي للعناصر داخلها)؛
  • map (بإعطاء دالة ومصفوفة، أرجِع مصفوفة نتائج تطبيق function(item) على كل العناصر)؛
  • foldl (بإعطاء دالة ومصفوفة وقيمة مراكم ابتدائية، اطوِ (اختزل) كل عنصر في المراكم من اليسار)؛
  • foldr (بإعطاء دالة ومصفوفة وقيمة مراكم ابتدائية، اطوِ (اختزل) كل عنصر في المراكم من اليمين)؛
  • reverse (بإعطاء مصفوفة، أرجِع مصفوفة تضم كل العناصر الأصلية، لكن بترتيب معكوس).

لاحظ أن ترتيب تمرير الوسائط إلى دالتي الطيّ (foldl وfoldr) مهم.

الأمر apply في Tcl

قد تبدو حالات الاختبار مربكة. المطلوب منك تنفيذ ما يلي:

set myList {alpha beta gamma delta}
listOps::filter $myList {{word} {expr {[string length $word] == 4}}

لماذا تحتوي تلك الوسيطة الأخيرة على كل هذه الأقواس المعقوفة؟

تذكّر أن الأمر proc يُعرَّف كالتالي:

proc procName argList body

يحتوي Tcl على أمر apply:

apply func ?arg1 arg2 ...?

هذه "func" قائمة من عنصرين {argList body}، وهي في جوهرها إجراء مجهول (أو "لامبدا"). يستدعي الأمر apply ذلك الإجراء المجهول ويمرّر إليه الوسائط التي يحتاجها.

على سبيل المثال، هذه الأمثلة متكافئة:

# using proc
proc myReverse {str} {return [string reverse $str]}
puts [myReverse "Hello, World!"]

# using apply
puts [apply {{str} {string reverse $str}} "Hello, World!"]

# or, store the func in a variable
set func {{str} {string reverse $str}}
puts [apply $func "Hello, World!"]

استخدام apply يجعل تمرير كتل الكود أسهل.

المراجع: apply، proc.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Tcl Exercism

مستعد لبدء عمليات القوائم؟

سجّل في Exercism لتتعلّم وتتقن Tcl عبر 135 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.

تعمّق في عمليات القوائم!

استمتع بمقدمة عملية إلى الاستدعاء الذاتي، واستكشف البدائل الأمرية والوظيفية لتمرين عمليات القوائم، وتعمّق في الاستدعاء الذاتي الذيلية ودوال المراكم.