If you do not find what you're looking for, you can use more accurate words.
خلافا للعديد من لغات البرمجة الأخرى، REXX الكلاسيكية لا يوجد لديها دعم مباشر لمصفوفات المتغيرات التي تعالج بمؤشر عددي. بدلا من ذلك فإنها توفر متغيرات مركبة. المتغير المركب يتكون من جذع يليه ذيل A.. يتم استخدام (نقطة) لضم الجذع إلى الذيل. إذا كانت الذيول المستخدمة رقمية، فمن السهل لإنتاج نفس التأثير كمصفوفة.
do i = 1 to 10 stem.i = 10 - i end
بعد ذلك المتغيرات التالية مع القيم التالية موجودة : stem.1 == 9, stem.2 = 8, stem.3 == 7... وخلافا للمصفوفات، مؤشر المتغير الجذعي غير مطلوب أن يكون له قيمة عددية. على سبيل المثال، الرمز التالي هو صحيح :
i = "Monday" stem.i = 2
في REXX أيضاً من الممكن تحديد قيمة افتراضية للجذع.
stem. = "Unknown" stem.1 = "USA" stem.44 = "UK" stem.33 = "France"
بعد هذه المهام فإن مصطلح stem.3 سوف ينتج "شيء غير معروف" "Unknown". ويمكن أيضا حذف كل الجذع مع عبارة DROP.
drop stem.
وله أيضاً تأثير إزالة أي قيمة افتراضية معينة سابقا.
بالاتفاق (وليس كجزء من اللغة) مجمع stem.0 غالبا ما يستخدم لتتبع عدد العناصر الموجودة في الساق، على سبيل المثال إجراء لإضافة كلمة إلى قائمة قد تكون مشفرة مثل هذا :
add_word: procedure expose dictionary. parse arg w n = dictionary.0 + 1 dictionary.n = w dictionary.0 = n return
ومن الممكن أيضا أن يكون هناك عناصر متعددة في ذيل المتغير امركب. على سبيل المثال :
m = "July" d = 15 y = 2005 day.y.m.d = "Friday"
يمكن استخدام عناصر الذيل الرقمي المتعدد لتوفير تأثير مصفوفة متعددة الأبعاد.
تم العثور على ملامح مشابهة لمتغيرات REXX المركبة في العديد من اللغات الأخرى (المصفوفات الترابطية في أووك AWK، علامات الرقم hashes في بيرل Perl، Hashtablesجداول البعثرة في جافا، الخ). ومعظم هذه اللغات توفير تعليمات للتكرار على كل المفاتيح (أو ذيول في لغة REXX) من مثل هذا البناء، ولكن هذا غير موجود في REXX الكلاسيكية. بدلا من ذلك فإنه من الضروري للحفاظ على قوائم المساعدة لقيم الذيل، حسب اقتضاء الأمر. على سبيل المثال في برنامج لعد الكلمات يمكن استخدام الإجراء التالي لتسجيل كل وجود لكلمة.
add_word: procedure expose count. word_list parse arg w. count.w = count.w + 1 /* assume count. has been set to 0 */ if count.w = 1 then word_list = word_list w return
ومن ثم لاحقا
do i = 1 to words(word_list) w = word(word_list,i) say w count.w end
في سبيل بعض الوضوح من الممكن الجمع بين هذه التقنيات إلى جذع واحد.
add_word: procedure expose dictionary. parse arg w. dictionary.w = dictionary.w + 1 if dictionary.w = 1 /* assume dictionary. = 0 */ then do n = dictionary.0+1 dictionary.n = w dictionary.0 = n end return
ثم لاحقا
do i = 1 to dictionary.0 w = dictionary.i say i w dictionary.w end
ومع ذلك، لا يوفر REXX شبكة أمان هنا، إذا كانت إحدى الكلمات رقم كامل أقل من dictionary.0 ستفشل في ظروف غامضة.
التطبيقات الحديثة من REXX، بما في ذلك كائن REXX آي بي إم والتطبيقات مفتوحة المصدر مثل ooRexx تشمل بناء لغة جديدة لتبسيط التكرار أكثر من القيمة الجذعية، أو أكثر من مجموعة الكيانات أخرى مثل مصفوفة، قائمة، جدول، الخ.
do i over stem. say i "-->" stem.i end