رانك (لغة برمجة J)
تُعدّ Rank تعميمًا للحلقات كما تُستخدم في لغات البرمجة العددية (غير الموجهة نحو المصفوفات ) . [ 1 ] [ 2 ] وهي أيضًا تعميم لدالة mapcar في لغة Lisp [ 3 ] ودالة map في لغات البرمجة الوظيفية الحديثة ، وتعميم للتوسيع العددي، والضرب الداخلي ( المصفوفي )، والضرب الخارجي في لغة APL/360. قد تكون لغة J هي التطبيق القياسي لـ Rank ، ولكنها متوفرة أيضًا في Dyalog APL ، والمعيار التقني لمنظمة ISO الخاص بلغة Extended APL، وNARS2000.
للرتبة عدة معانٍ مختلفة. بشكل عام، يُستخدم مفهوم الرتبة لمعالجة المصفوفة المتعامدة من حيث مصفوفاتها الفرعية. [ 4 ] على سبيل المثال، يمكن التعامل مع مصفوفة ثنائية الأبعاد عند الرتبة 2 باعتبارها المصفوفة بأكملها، أو عند الرتبة 1 للتعامل مع أعمدتها أو صفوفها أحادية البعد الضمنية، أو عند الرتبة 0 للتعامل مع مستوى عناصرها الفردية.
- رتبة الاسم – رتبة الاسم هي عدد صحيح غير سالب .
- رتبة الفعل - رتبة الفعل هي قائمة من ثلاثة أعداد صحيحة.
- أداة الربط الرتبية
"– تُستخدم أداة الربط الرتبية ( ) لاشتقاق فعل برتبة محددة.
الترتيب كتعميم للتكرار
يتطلب فهم الرتبة معرفة بعض المفاهيم الأساسية للبرمجة الموجهة نحو المصفوفات. في معظم لغات البرمجة التي تعتمد على المصفوفات، يُشار إلى عملية الاختزال بشرطة/ مائلة . في لغة J، تأخذ هذه الشرطة المائلة وسيطًا أيسرًا للدالة ووسيطًا أيمنًا للمصفوفة المراد اختزالها بواسطة تلك الدالة.
+/ 1 2 3 6 والنتيجة 1 + 2 + 3كما هو متوقع.
يمكن أيضًا إنشاء مصفوفة أعداد صحيحة متعددة الأبعاد (N-dimensional) باستخدام i.دالة تأخذ متجهًا من الأعداد الصحيحة كمعاملات لها. يحدد عدد الأعداد الصحيحة بُعد المصفوفة، بينما تحدد القيمة المطلقة لكل عدد صحيح طول البُعد المقابل.
i . 3 0 1 2i . 2 3 0 1 2 3 4 51. 2 3 4 0 1 2 3 4 5 6 7 8 9 10 1112 13 14 15 16 17 18 19 20 21 22 23والآن دعونا نختزل مصفوفة ثنائية الأبعاد عن طريق الجمع.
+/ i . 2 3 3 5 7والنتيجة 0 1 2 + 3 4 5كما هو متوقع. يتم إجراء عملية الاختزال على طول كل عمود، حيث يتم جمع جميع الأرقام الموجودة في ذلك العمود.
يتوافق تطبيق هذا +/على مصفوفة ثنائية الأبعاد مع جزء كود C التالي: [ 5 ]
for ( j = 0 ; j < 3 ; ++ j ) { sum [ j ] = 0 ; } for ( i = 0 ; i < 2 ; ++ i ) { for ( j = 0 ; j < 3 ; ++ j ) { sum [ j ] += array [ i ][ j ]; } }لنفترض أننا نريد جمع عناصر كل صف، كما هو موضح في جزء كود C:
for ( i = 0 ; i < 2 ; ++ i ) { sum [ i ] = 0 ; for ( j = 0 ; j < 3 ; ++ j ) { sum [ i ] += array [ i ][ j ]; } }لإنتاج النتيجة 3 12، يمكننا القيام بذلك في J بدون استخدام الحلقات ببساطة عن طريق استخدام rank.
+/" 1 i . 2 3 3 12لتوضيح كيفية عمل الرتبة في J بشكل أكبر، يمكننا أن نرى أن التعبير الأصلي هو من الرتبة 2. يتم تعيين العامل عند أعلى رتبة للمصفوفة.
+/" 2 i . 2 3 3 5 7يشيع استخدام هذه الأسماء للإشارة إلى المصفوفات ذات الأبعاد المنخفضة، [ 6 ] على الرغم من أنها محل خلاف في بعض الأحيان. [ 7 ]
اسم رتبة ذرة أو كمية قياسية 0 متجه أو قائمة 1 جدول أو مصفوفة 2 الموتر أو المكعب 3
رتبة الاسم
في اللغة J، تُعتبر الأسماء عبارة عن مصفوفات . رتبة الاسم هي عدد أبعاد تلك المصفوفة. #@$ويحدد الفعل المشتق رتبة الاسم.
رتبة الفعل
في لغة J، تُعرَّف الأفعال بأنها دوال تأخذ أسماء كمعاملات وتُنتج أسماء كنتائج. وتتحكم رتبة الفعل في كيفية تطبيقه على الأسماء ذات الرتب الأكبر من صفر. وتُعبَّر رتبة الفعل بثلاثة أرقام:
- رتب حالة الموناد؛ على سبيل المثال ،
−yيستخدم−كموناد - رتبة الوسيط الأيسر في حالة الثنائي؛ على سبيل المثال ، يستخدم كثنائي
x−y− - رتب الحجة الصحيحة لحالة الثنائي
في جميع الحالات، يوجد تعريف فعلي أساسي ينطبق على الخلايا ، وهي عبارة عن مصفوفات فرعية من الرتبة المحددة. أو، إذا لم يكن للوسيط هذا العدد من الأبعاد، فإنه ينطبق على الوسيط بأكمله.
في الأفعال، يُفسَّر الرتبة السالبة على أنها رتبة الاسم المُقدَّم لذلك الفاعل مطروحًا منها القيمة المشار إليها. (ولكن ليس أقل من الصفر أبدًا).
- على سبيل المثال، عند إعطاء فعل ذي رتبة أحادية سالبة واحد وسيطًا من الرتبة 3، فإنه يقسم الوسيط إلى قائمة من المصفوفات من الرتبة 2. ويتم تطبيق جسم الفعل مرة واحدة على كل من هذه المصفوفات الفرعية ثنائية الأبعاد.
في سياق فعل واسم محددين، تُقسّم أبعاد ذلك الاسم إلى تسلسل أبعاد البادئات، ويُسمى الإطار ، وتسلسل أبعاد اللواحق، ويُسمى الخلايا . تشير رتب الأفعال الموجبة إلى عدد أبعاد الخلايا، بينما تشير رتب الأفعال السالبة إلى عدد أبعاد الإطار.
في الحالة الثنائية، يوجد إطاران: أحدهما للوسيط الأيسر، والآخر للوسيط الأيمن. يجب أن يتطابق هذان الإطاران. إذا لم يكونا متطابقين، فيجب أن يكون أحدهما بادئة للآخر؛ على سبيل المثال، يضرب كل قيمة عددية (عنصر ذو بُعد صفري) على اليسار بكل متجه (عنصر ذو بُعد واحد) على اليمين. ستكون أبعاد نتيجة تقييم هذا الفعل هي أبعاد الإطار الأطول كأبعاد بادئة لنتيجته. أما أبعاد النتيجة اللاحقة، إن وجدت، فستكون نتيجة تطبيق الفعل على الخلية (الخلايا) المعنية. في الحالات الشاذة، حيث لا تمتلك الوسائط أبعادًا كافية، تنخفض رتبة الفعل فعليًا (مما يؤثر على نتيجته).(i.23)*"01i.234
على سبيل المثال،
10 + 4 5 6 14 15 16هنا، رتبة الفعل +هي 0 0 0، ورتبة الوسيط الأيسر هي 0، ورتبة الوسيط الأيمن هي 1 (بعده 3). بالتالي، إطار الوسيط الأيسر رتبته 0، وإطار الوسيط الأيمن رتبته 1 (بعده 3). إطار الوسيط الأيسر (الفارغ) لاحقة صحيحة لإطار الوسيط الأيمن، لذا فهذه عملية صحيحة. والنتيجة رتبتها 1 وبعدها 3.
العطف الرتبي
تأخذ أداة الربط الرتبية فعلًا كمعامل أيسر واسمًا كمعامل أيمن لتكوين فعل جديد. ويتكون الاسم كمعامل أيمن من ثلاثة أرقام كحد أقصى، تحدد الرتبة الأحادية، والرتبة الثنائية اليسرى، والرتبة الثنائية اليمنى، على التوالي. [ 8 ]
إذا كان الوسيط الأيمن يتكون من عددين فقط، فسيتم اعتبارهما رتبتين في الحالة الثنائية: العدد الأول هو رتبة الوسيط الأيسر، والعدد الثاني هو رتبة الوسيط الأيمن. لذا، إذا أردنا إضافة متجه إلى كل متجه في مصفوفة:
1 2 3 +" 1 1 i . 3 3 1 3 5 4 6 8 7 9 11إذا أردنا بدلاً من ذلك إضافة كل قيمة عددية على اليسار إلى كل متجه على اليمين، فسنفعل ذلك بهذه الطريقة:
1 2 3 +" 0 1 i . 3 3 1 2 3 5 6 7 9 10 11إذا كانت الحجة الصحيحة رقمًا واحدًا فقط، فسيتم اعتباره رتبة لجميع الحالات الثلاث.
إذا كان المُعامل الصحيح فعلاً، يُستخدم ترتيبه. على سبيل المثال، جميع هذه المُعاملات تُشتق من نفس الفعل:
+"000+"00+"0+"+
إذا كان الوسيط الأيسر لحرف العطف اسمًا، فإنه يُنشأ فعل ثابت. يتجاهل جسم هذا الفعل قيم أي وسيطات أخرى، وينتج دائمًا نتيجة هي ذلك الاسم.
مراجع
- ↑ سليباك، جاستن؛ شيفرز، أولين؛ مانوليوس، بانايوتيس. "لغة موجهة نحو المصفوفات مع تعدد الأشكال ذي الرتبة الثابتة" (PDF) .
- ↑ "البرمجة بدون حلقات 1: للأفعال رتبة" . Jsoftware .
- ↑ "وظيفة mapcar" . مؤسسة البرمجيات الحرة .
- ↑ بيرنيكي، ر. (ديسمبر 1987). "مقدمة في رتبة الدالة" . وقائع مؤتمر APL88، APL Quote Quad . المجلد 18.
- ↑ "التحكم في تنفيذ الأفعال من خلال تحديد رتبة" . Jsoftware .
- ↑ رابانسر، ستيفان؛ ششور، أولكسندر؛ غونيمان، ستيفان (29-11-2017). "مقدمة في تحليل الموترات وتطبيقاتها في التعلم الآلي". arXiv : 1711.10781 [ stat.ML ].
- ↑ kgwgk; nabla9; azag0; tome; radarsat1 (24-04-2017). "HPTT: تحويل موتر عالي الأداء بلغة C++" . Hacker News . Y Combinator . تم الاسترجاع في 10-12-2019 .
{{cite web}}: صيانة CS1: الأسماء الرقمية: قائمة المؤلفين ( رابط ) - ↑ بيرك، كريس (12-09-2014). "المقالات: الترتيب" . جيه سوفتوير .
- أبرامز، بي إس (فبراير 1970). "§II.E". آلة APL (ملف PDF) . جامعة ستانفورد (دكتوراه).
- باكوس، جيه دبليو، هل يمكن تحرير البرمجة من أسلوب فون نيومان؟ أسلوب وظيفي وجبر برامجه ( https://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf )، اتصالات ACM، المجلد 21، العدد 8، 1978-08؛ §11.3.3.
- بيرنيكي، ر.؛ إيفرسون، ك. إي. (6-8 أكتوبر 1980). "المعاملات والمصفوفات المغلقة" . وقائع اجتماع مستخدمي لغة البرمجة APL لعام 1980. Jsoftware .
- بيرنيكي، ر.؛ إيفرسون، ك.إ.؛ ماكدونيل، إ.إ.؛ ميتزجر، ر.س.؛ شويلر، ج.هـ. (2 مايو 1983). "SATN 45: امتدادات اللغة لشهر مايو 1983" . Jsoftware . شركة آي بي شارب أسوشيتس المحدودة.
- براون، جيه إيه، مبادئ APL2 ( https://softwarepreservation.computerhistory.org/apl/paper/PRINCIPLESOFAPL2.pdf )، TR 03.247، مختبر IBM سانتا تيريزا، سان خوسيه، كاليفورنيا، 1984-03؛ §20.0.
- Dyalog، Dyalog APL الإصدار 14.0 ملاحظات الإصدار ( http://www.dyalog.com/dyalog-version-140.htm )، Dyalog Limited، 2015.
- Hui, RKW, Rank and Uniformity ( http://www.jsoftware.com/papers/rank.htm ), APL95 Conference Proceedings, APL Quote Quad, Volume 25, Number 4, 1995-06.
- هوي، آر كي دبليو، تذكر كين إيفرسون ( https://keiapl.org/rhui/remember.htm )، 2004-11.
- Hui, RKW, Inner Product—An Old/New Problem ( http://www.jsoftware.com/papers/innerproduct/ip.htm ), British APL Association Conference 2009, 2009-06-08.
- Iverson, KE, Operators and Functions ( http://www.jsoftware.com/papers/opfns.htm ), Research Report #RC7091, IBM, 1978-04-26.
- Iverson, KE, A Dictionary of APL ( http://www.jsoftware.com/papers/APLDictionary.htm ), APL Quote Quad, Volume 18, Number 1, 1987-09.
- Iverson, KE, A Personal View of APL ( http://www.jsoftware.com/papers/APLPersonalView1.htm ), IBM Systems Journal, Volume 30, Number 4, 1991-12.
- Slepak, Justin; Shivers, Olin; Manolios, Panagiotis, An array-oriented language with static rank polymorphism ( http://www.ccs.neu.edu/home/jrslepak/typed-j.pdf ).
روابط خارجية
- عائلة لغات البرمجة APL
