بناء جملة ورموز لغة APL

تتميز لغة البرمجة APL بكونها رمزية وليست معجمية : إذ تُرمز إلى عناصرها الأساسية برموز ، لا بكلمات. وقد صُممت هذه الرموز في الأصل كترميز رياضي لوصف الخوارزميات. [ 1 ] غالبًا ما يُطلق مبرمجو APL أسماءً غير رسمية عند مناقشة الدوال والمعاملات (على سبيل المثال، "product" للمعامل ×/)، ولكن الدوال والمعاملات الأساسية التي توفرها اللغة تُرمز إليها برموز غير نصية.

الوظائف الأحادية والثنائية

تُشير معظم الرموز إلى الدوال أو المعاملات . تأخذ الدالة الأحادية كمعامل لها نتيجة تقييم كل ما يقع على يمينها (مع مراعاة الأقواس كالمعتاد). أما الدالة الثنائية فلها معامل آخر، وهو أول عنصر بيانات على يسارها. تُشير العديد من الرموز إلى كلٍ من الدوال الأحادية والثنائية، ويتم تفسيرها وفقًا للاستخدام. على سبيل المثال، ⌊3.2 يُعطي 3، وهو أكبر عدد صحيح ليس أعلى من المعامل، و3⌊2 يُعطي 2، وهو أصغر المعاملين.

الدوال والمعاملات

تستخدم لغة APL مصطلح "المعامل " بالمعنى الذي حدده هيفسايد ، أي كعامل وسيط في الدالة، على عكس استخدام بعض لغات البرمجة الأخرى لنفس المصطلح للدلالة على عملية تُجرى على البيانات، انظر: المعامل العلائقي والمعاملات بشكل عام . تستخدم لغات برمجة أخرى هذا المصطلح أحيانًا كمرادف للدالة ، إلا أن كلا المصطلحين يُستخدمان في APL بدقة أكبر. [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] كانت التعريفات المبكرة لرموز APL دقيقة جدًا في تصنيفها. [ 7 ] على سبيل المثال، يُرمز للمعامل "reduce" بشرطة مائلة، ويُقلّص مصفوفة على طول أحد محاورها بإدخال معامل الدالة . مثال على "reduce" :

 ×/2 3 4 24 
<< نتائج مكافئة في لغة APL >> << تم استخدام عامل الاختزال / على اليسار
 2×3×4 24 

في المثال أعلاه، يُعدِّل عامل الاختزال (أو القسمة) دالة الضرب . يُنتج التعبير ×/2 3 4 قيمة عددية (عنصر واحد فقط) من خلال اختزال مصفوفة بالضرب. في هذه الحالة المبسطة، تخيَّل ضرب (جمع، طرح، أو قسمة) أكثر من بضعة أعداد. (في حالة المتجه، يُعيد ×/ ناتج ضرب جميع عناصره).


 1 0 1/45 67 45 0 67 
<< نتائج معاكسة في لغة APL >> << توسيع الدالة الثنائية \ المستخدمة على اليسار تكرار الدالة الثنائية / المستخدمة على اليمين >>
 1 0 1/45 0 67 45 67 

تُوضح الأمثلة المذكورة أعلاه للدوال الثنائية [المثالان الأيسر والأيمن] (باستخدام الرمز / نفسه في المثال الأيمن) كيفية استخدام القيم المنطقية (0 و1) كوسيطات يسرى للدالتين \ expand و / replicate لإنتاج نتائج معاكسة تمامًا. على الجانب الأيسر، يتم توسيع المتجه ذي العنصرين {45 67} عند وجود القيم المنطقية 0 لينتج عنه متجه ذو ثلاثة عناصر {45 0 67} - لاحظ كيف أضافت لغة APL القيمة 0 إلى المتجه. وعلى العكس، يحدث العكس تمامًا على الجانب الأيمن - حيث يصبح المتجه ذو الثلاثة عناصر مكونًا من عنصرين فقط؛ إذ تحذف القيم المنطقية 0 العناصر باستخدام الدالة الثنائية / slash . تعمل رموز APL أيضًا على قوائم (متجهات) العناصر باستخدام أنواع بيانات أخرى غير الرقمية فقط، على سبيل المثال، يمكن استبدال متجه ذي عنصرين من سلاسل الأحرف {"Apples" "Oranges"} بالمتجه الرقمي {45 67} أعلاه.

قواعد بناء الجملة

في لغة APL، يكون تسلسل أسبقية الدوال أو المعاملات موضعيًا تمامًا: تُقيّم التعبيرات من اليمين إلى اليسار. لا تتبع APL أسبقية المعاملات المعتادة في لغات البرمجة الأخرى؛ فعلى سبيل المثال، ×لا تربط معاملاتها "بشكل أكثر إحكامًا" من غيرها +. بدلًا من أسبقية المعاملات، تُعرّف APL مفهوم النطاق .

يُحدد نطاق الدالة وسائطها . تتميز الدوال بنطاق أيمن طويل ، أي أنها تأخذ كمعامل أيمن كل ما يقع على يمينها. أما الدالة الثنائية فلها نطاق أيسر قصير ، أي أنها تأخذ كمعامل أيسر أول جزء من البيانات على يسارها. على سبيل المثال، (العمود الأيسر أدناه هو كود البرنامج الفعلي من جلسة مستخدم APL ، والمسافة البادئة = مدخلات المستخدم الفعلية ، وبدون مسافة بادئة = النتيجة التي يُرجعها مُفسِّر APL ):


قد يحتوي المعامل على دوال أو بيانات كمعاملات ، ويُقيّم إلى دالة ثنائية أو أحادية. للمعاملات نطاق أيسر طويل. يأخذ المعامل كمعامل أيسر أطول دالة إلى يساره. على سبيل المثال:

المعامل الأيسر لعامل over -each¨ هو دالة الفهرس ⍳ . تُستخدم الدالة المشتقة بشكل أحادي، وتأخذ المتجه كمعامل أيمن لها. ينتهي النطاق الأيسر لـ each بواسطة عامل reduce ، المشار إليه بالشرطة المائلة . معاملها الأيسر هو تعبير الدالة على يسارها: وهو حاصل الضرب الخارجي لدالة equals . نتيجة ∘.=/ هي دالة أحادية. مع النطاق الأيمن الطويل المعتاد للدالة، تأخذ نتيجة ⍳¨3 3 كمعامل أيمن لها.⍳¨3 3



الوظائف الأحادية

الاسم (الأسماء)الترميزمعنىنقطة ترميز يونيكود
لفافة?Bعدد صحيح واحد يتم اختياره عشوائياً من بين أول B عدد صحيحU+003F ؟ علامة استفهام
سقف⌈Bأصغر عدد صحيح أكبر من أو يساوي BU+2308 السقف الأيسر
أرضية⌊Bأكبر عدد صحيح أصغر من أو يساوي BU+230A الطابق الأيسر
الشكل، رو⍴Bعدد المكونات في كل بُعد من أبعاد BU+2374 APL FUNCTIONAL SYMBOL RHO
لا ، تيلد∼Bمنطقيًا: 1 يساوي 0، 0 يساوي 1U+223C TELDE OPERATOR
القيمة المطلقة∣Bمقدار BU+2223 يقسم
مولد الفهرسة، إيوتا⍳Bمتجه الأعداد الصحيحة الأولى BU+2373 APL FUNCTIONAL SYMBOL IOTA
النمو الأسي⋆Be أس BU+22C6 مشغل النجوم
النفي−Bيغير إشارة BU+2212 علامة السالب
المرافق+Bالمرافق المركب للعدد B (يتم إرجاع الأعداد الحقيقية دون تغيير)U+002B + علامة زائد
سيغنوم×B¯1 إذا كانت B < 0؛ 0 إذا كانت B = 0؛ 1 إذا كانت B > 0U+00D7 × علامة الضرب
متبادل÷B1 مقسومة على BU+00F7 ÷ علامة القسمة
رافِل، كاتينات، صفائح,Bيعيد تشكيل B إلى متجهU+002C ، فاصلة
معكوس المصفوفة ، قسمة رباعي أحادي⌹Bمعكوس المصفوفة BU+2339 رمز APL الوظيفي: القسمة الرباعية
أوقات باي○Bاضرب في πU+25CB دائرة بيضاء
اللوغاريتم⍟Bاللوغاريتم الطبيعي لـ BU+235F APL رمز وظيفي دائرة نجمة
انعكاس⌽Bاعكس عناصر B على طول المحور الأخيرU+233D APL رمز وظيفي دائرة نمط
انعكاس⊖Bاعكس عناصر B على طول المحور الأولU+2296 دائرة ناقص
ارتقِ بمستوى أدائك⍋Bمؤشرات B التي سترتب B بترتيب تصاعديU+234B APL FUNCTIONAL SYMBOL DELTA STILE
خفض الدرجة⍒Bمؤشرات B التي سترتب B بترتيب تنازليU+2352 APL FUNCTIONAL SYMBOL DEL STILE
ينفذ⍎Bتنفيذ تعبير APLU+234E APL رمز وظيفي لأسفل TACK JOT
تنسيق أحادي⍕Bتمثيل حرفي لـ BU+2355 APL FUNCTIONAL SYMBOL UP TACK JOT
التحويل الأحادي⍉Bاعكس محاور BU+2349 رمز وظيفي APL دائرة شرطة مائلة عكسية
مضروب!Bحاصل ضرب الأعداد الصحيحة من 1 إلى BU+0021 ! علامة تعجب
عمق≡Bعمق التداخل: 1 للمصفوفة غير المتداخلةU+2261 مطابق لـ
طاولة⍪Bيحوّل B إلى جدول، وهو عبارة عن مصفوفة ثنائية الأبعاد.U+236A رمز وظيفي APL فاصلة شريط

الوظائف الثنائية

الاسم (الأسماء)الترميزمعنىنقطة ترميز يونيكود 
يضيفA+Bمجموع أ و بU+002B + علامة زائد
طرحA−Bأ ناقص بU+2212 علامة السالب
ضاعفA×Bأ مضروبة في بU+00D7 × علامة الضرب
قسّمA÷Bأ مقسومة على بU+00F7 ÷ علامة القسمة
الأسA⋆Bأ مرفوعة إلى القوة بU+22C6 مشغل النجوم
دائرةA○Bالدوال المثلثية لـ B المختارة بواسطة A
A =1: sin( B ) A =2: cos( B ) A =3: tan( B ) 
أ =5: سينه( ب ) أ =6: كوش( ب ) أ =7: تنه( ب )

تنتج القيم السالبة معكوس الدوال المقابلة لها

U+25CB دائرة بيضاء
اتفاقA?Bأ- أعداد صحيحة مميزة مختارة عشوائياً من أول ب- أعداد صحيحة (بدون إرجاع)U+003F ؟ علامة استفهام
العضوية، إبسيلونA∈B1 للعناصر الموجودة في A في B ؛ 0 حيث لا توجد.U+2208 عنصر من
ابحث عن، إبسيلون أندربارA⍷B1 لنقطة البداية للمصفوفة متعددة العناصر A الموجودة في B ؛ 0 حيث لا توجد.U+2377 رمز وظيفي APL إبسيلون أسفل الخط
الحد الأقصى ، السقفA⌈Bالقيمة الأكبر لـ أ أو بU+2308 السقف الأيسر
الحد الأدنى ، الأرضيةA⌊Bالقيمة الأصغر لـ A أو BU+230A الطابق الأيسر
إعادة تشكيل، رو الثنائيA⍴Bمصفوفة من الشكل A تحتوي على البيانات BU+2374 APL FUNCTIONAL SYMBOL RHO
يأخذA↑Bاختر أول (أو آخر) عنصر من عناصر المجموعة B ( A ) وفقًا لـ × AU+2191 سهم للأعلى
يسقطA↓Bقم بإزالة أول (أو آخر) عنصر من عناصر المجموعة B، A ، وفقًا لـ × AU+2193 سهم متجه للأسفل
فك الشفرةA⊥Bقيمة كثيرة الحدود التي معاملاتها هي B عند AU+22A5 صعود
التشفيرA⊤Bالأساس - تمثيل لقيمة BU+22A4 مسار هبوطي
بقاياA∣Bب modulo أ ؛ أ يقسم بU+2223 يقسم
السلسالA,Bعناصر المجموعة ب الملحقة بعناصر المجموعة أU+002C ، فاصلة
التوسع، الضربة العكسية الثنائيةA\Bأدخل أصفارًا (أو فراغات) في B تقابل الأصفار في AU+005C \ الصلابة العكسية
الضغط، القطع الثنائيA/Bحدد العناصر في B التي تتطابق مع العناصر في AU+002F / SOLIDUS
فهرس، إيوتا الثنائيةA⍳Bموقع (فهرس) العنصر B في العنصر A ؛ إذا لم يتم العثور عليه1+⍴AU+2373 APL FUNCTIONAL SYMBOL IOTA
قسمة المصفوفة، قسمة الرباعي الثنائيA⌹Bحل نظام المعادلات الخطية ، الانحدار المتعدد A x = BU+2339 رمز APL الوظيفي: القسمة الرباعية
تناوبA⌽Bيتم تدوير عناصر المجموعة B إلى المواضع AU+233D APL رمز وظيفي دائرة نمط
تناوبA⊖Bيتم تدوير عناصر المجموعة B بمقدار A موضعًا على طول المحور الأولU+2296 دائرة ناقص
اللوغاريتمA⍟Bلوغاريتم العدد B للأساس AU+235F APL رمز وظيفي دائرة نجمة
صيغة ثنائيةA⍕Bقم بتنسيق B في مصفوفة أحرف وفقًا لـ AU+2355 APL FUNCTIONAL SYMBOL UP TACK JOT
ترجمة عامةA⍉Bيتم ترتيب محاور B بواسطة AU+2349 رمز وظيفي APL دائرة شرطة مائلة عكسية
التوليفاتA!Bعدد التوليفات التي تتضمن B مأخوذة من A في كل مرةU+0021 ! علامة تعجب
Diaeresis، Dieresis، نقطة مزدوجةA¨Bعلى كل منها، أو قم بتنفيذ كل منها على حدة؛ ب = على هذه؛ أ = العملية المراد تنفيذها أو استخدامها (مثل، إيوتا)U+00A8 ¨ انفصال العضلة العاصرة
أقل منA<Bالمقارنة: 1 إذا كان صحيحًا، 0 إذا كان خاطئًاU+003C < علامة أصغر من
أقل من أو يساويA≤Bالمقارنة: 1 إذا كان صحيحًا، 0 إذا كان خاطئًاU+2264 أقل من أو يساوي
متساويA=Bالمقارنة: 1 إذا كان صحيحًا، 0 إذا كان خاطئًاU+003D = علامة يساوي
أكبر من أو يساويA≥Bالمقارنة: 1 إذا كان صحيحًا، 0 إذا كان خاطئًاU+2265 أكبر من أو يساوي
أكبر منA>Bالمقارنة: 1 إذا كان صحيحًا، 0 إذا كان خاطئًاU+003E > علامة أكبر من
غير متساوينA≠Bالمقارنة: 1 إذا كان صحيحًا، 0 إذا كان خاطئًاU+2260 لا يساوي
أوA∨Bالمنطق البولياني: 0 (خطأ) إذا كان كل من A و B يساوي 0 ، و 1 خلاف ذلك. بديل: 1 (صواب) إذا كان A أو B يساوي 1 (صواب).U+2228 أو المنطقي
وA∧Bالمنطق البولياني: 1 (صحيح) إذا كان كل من A و B يساوي 1 ، 0 (خطأ) خلاف ذلكU+2227 منطقي و
ولاA⍱Bالمنطق البولياني: 1 إذا كانت كل من A و B تساوي 0، وإلا 0. بديل: ~∨ = ليس أوU+2371 رمز وظيفي APL لأسفل علامة الإقحام علامة المد
ناندA⍲Bالمنطق البولياني: 0 إذا كان كل من A و B يساوي 1، وإلا 1. بديل: ~∧ = ليس وU+2372 APL رمز وظيفي لأعلى (علامة المربع) علامة المد
غادرA⊣BأU+22A3 يسار
يمينA⊢BبU+22A2 مسار يمين
مباراةA≡B1 إذا تطابق A مع B تمامًا فيما يتعلق بالقيمة والشكل والتداخل؛ وإلا 0.U+2261 مطابق لـ
صفحA⍪Bقم بالربط على طول المحور الأولU+236A رمز وظيفي APL فاصلة شريط

مؤشرات التشغيل والمحور

الاسم (الأسماء)رمزمثالالمعنى (على سبيل المثال)تسلسل نقاط ترميز يونيكود
تقليل (المحور الأخير)، قطع/+/Bالمجموع عبر BU+002F / SOLIDUS
تقليل (المحور الأول)+⌿Bالمجموع BU+233F رمز وظيفي APL SLASH BAR
مسح (المحور الأخير)، شرطة مائلة عكسية\+\Bالمجموع التراكمي عبر BU+005C \ الصلابة العكسية
المسح (المحور الأول)+⍀Bالمجموع التراكمي BU+2340 رمز وظيفي APL شريط مائل عكسي
المنتج الداخلي.A+.×Bحاصل ضرب المصفوفة A و BU+002E . نقطة
المنتج الخارجي∘.A∘.×Bحاصل الضرب الخارجي لـ A و BU+2218 مشغل الحلقة ، U+002E . نقطة كاملة

ملاحظات: تتوقع عوامل الاختزال والمسح دالة ثنائية على يسارها، مما يشكل دالة مركبة أحادية مطبقة على المتجه الموجود على يمينها.

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

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


في حالة خاصة، إذا تبعت دالة الربط الثنائي "," مؤشر محور (أو مُعدِّل محور لرمز/دالة)، فيمكن استخدامها لدمج (إدخال) مصفوفتين اعتمادًا على ما إذا كان مؤشر المحور أقل من أو أكبر من أصل الفهرس [ 8 ] (أصل الفهرس = 1 في الرسم التوضيحي أدناه):

المصفوفات المتداخلة

المصفوفات هي هياكل تتكون من عناصر مُجمّعة خطيًا كمتجهات أو في شكل جداول كمصفوفات ، ولها أبعاد أعلى (ثلاثية الأبعاد أو مكعبة، رباعية الأبعاد أو مكعبة مع الزمن ، إلخ). تُسمى المصفوفات التي تحتوي على كلٍ من الأحرف والأرقام بالمصفوفات المختلطة . [ 9 ] أما هياكل المصفوفات التي تحتوي على عناصر هي أيضًا مصفوفات فتُسمى بالمصفوفات المتداخلة . [ 10 ]

إنشاء مصفوفة متداخلة
جلسة المستخدم مع مترجم لغة APLتوضيح
X 4 5 ⍴⍳ 20 X 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 X [ 2 ; 2 ] 7 ⎕IO 1 X [ 1 ; 1 ] 1

X set = to matrix with 4 rows by 5 columns, composition of 20 sequence intage.

العنصر X[2;2] في الصف 2 - العمود 2 هو حاليًا عدد صحيح = 7 .

قيمة مؤشر الأصل الأولي ⎕IO = 1 .

وبالتالي، فإن العنصر الأول في المصفوفة X أو X[1;1] = 1 .

X [ 2 ; 2 ] "نص" X [ 3 ; 4 ] ( 2 2 ⍴⍳ 4 ) X 1 2 3 4 5 6 نص 8 9 1011 12 13 1 2 15 3 416 17 18 19 20
يتم تغيير العنصر في X[الصف 2؛ العمود 2] (من 7) إلى متجه متداخل "Text" باستخدام الدالة enclose ⊂ .

العنصر الموجود في X[الصف 3؛ العمود 4]، والذي كان سابقًا العدد الصحيح 14، أصبح الآن مصفوفة صغيرة مغلقة أو متداخلة ⊂ 2x2 من 4 أعداد صحيحة متتالية.

بما أن X يحتوي على أرقام ونصوص وعناصر متداخلة ، فهو عبارة عن مصفوفة مختلطة ومتداخلة في نفس الوقت .

تمثيل مرئي للمصفوفة المتداخلة

التحكم في التدفق

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

وظائف المستخدم
الدالة الصفرية PI أو π(pi)دالة أحادية دائرةدالة ثنائية SEGMENTAREA، مع متغيرات محلية
النتيجة نتيجة PI 1 
المساحة دائرة نصف القطر المساحة π × نصف القطر 2 
المنطقة درجات نصف قطر المنطقة القطاعية ; جزء ؛ الكسر CA الدرجات ÷ 360 CA منطقة نصف القطر الدائرية الكسر × CA 

يعتمد تحديد ما إذا كانت الدوال التي تحمل نفس المعرّف ولكن بدرجات مختلفة متميزة على التنفيذ. إذا كان ذلك مسموحًا، فيمكن تعريف الدالة CURVEAREA مرتين لاستبدال كل من الدالة CIRCLEAREA أحادية المعرّف والدالة SEGMENTAREA ثنائية المعرّف المذكورتين أعلاه، مع تحديد الدالة أحادية المعرّف أو ثنائية المعرّف بناءً على السياق الذي تمت الإشارة إليها فيه.

يمكن عادةً تطبيق الدوال الثنائية المخصصة على المعاملات بنفس اصطلاحات الدوال المدمجة، أي أن المصفوفات يجب أن تحتوي إما على نفس عدد العناصر أو أن تحتوي إحداها على عنصر واحد ممتد. وهناك استثناءات لهذه القاعدة، فعلى سبيل المثال، تتوقع دالة تحويل العملة البريطانية قبل النظام العشري إلى الدولار أن تأخذ معاملاً بثلاثة عناصر تحديداً تمثل الجنيهات والشلنات والبنسات. [ 11 ]

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

وبالتالي، يمكن تعديل الدالة SEGMENTAREA للتوقف (كما هو موضح أدناه)، وإرجاع الصفر إذا كانت المعلمات (DEGREES و RADIUS أدناه) ذات إشارات مختلفة :

AREA DEGREES SEGMENTAREA RADIUS ; FRACTION ; CA ; SIGN ⍝ المتغيرات المحلية المشار إليها بفاصلة منقوطة (;) FRACTION DEGREES ÷ 360 CA CIRCLEAREA RADIUS ⍝ يستدعي بيان كود APL هذا دالة المستخدم CIRCLEAREA، المعرفة أعلاه. الإشارة ( × الدرجات ) ≠ × نصف القطر ⍝ << اختبار منطق APL / تحديد ما إذا كانت الدرجات ونصف القطر لهما نفس الإشارة (≠ مستخدمة) 1- نعم مختلف (≠)، 0- لا (نفس الإشارة) المساحة 0 ⍝ القيمة الافتراضية للمساحة = صفر الإشارة / 0 ⍝ يحدث التفرع (هنا، الخروج) عندما تكون الإشارة = 1 بينما الإشارة = 0 لا تتفرع إلى 0. التفرع إلى 0 يخرج من الدالة. المساحة الكسر × المساحة 

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

90 180 270 ¯90 ∘. المنطقة القطاعية 1 ¯2 4 0 0 0 0 0 0 0 0 0 0 0

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

المساحة درجات مساحة القطعة نصف القطر ؛ كسر ؛ CA ؛ إشارة كسر درجات ÷ 360 CA ← دائرة مساحة نصف القطر إشارة ( × درجات ) ≠ × نصف القطر مساحة كسر × CA ×~ إشارة ⍝ هذه العبارة في لغة APL أكثر تعقيدًا، كسطر واحد - لكنها تحل الوسائط المتجهة: مقايضة - التعقيد مقابل التفرع 90 180 270 ¯90 ∘. المنطقة القطاعية 1 ¯2 4 0.785398163 0 12.5663706 1.57079633 0 25.1327412 2.35619449 0 37.6991118 0 ¯3.14159265 0

إن تجنب عمليات نقل التحكم الصريحة، والتي تُسمى أيضًا بالتفرع، إذا لم تتم مراجعتها أو التحكم بها بعناية، قد يُشجع على استخدام عبارات مُعقدة للغاية ، تُعرف بـ"التعابير الاصطلاحية المُعقدة والمُساء فهمها"، وأسلوب "الكتابة فقط"، الأمر الذي لم يُسهم في تحسين صورة لغة APL لدى المُعلقين المؤثرين مثل إدسكار ديكسترا . [ 12 ] في المقابل، يُمكن أن تكون تعابير APL الاصطلاحية مُمتعة، تعليمية، ومفيدة - إذا استُخدمت مع تعليقات مُفيدة ⍝ ، على سبيل المثال، تضمين مصدر التعبير الاصطلاحي ومعناه ووظيفته المقصودة. إليك قائمة بتعابير APL الاصطلاحية ، وقائمة بتعابير IBM APL2 الاصطلاحية هنا [ 13 ] ، ومكتبة تعابير APL الفنلندية هنا .

متنوع

رموز متنوعة
الاسم (الأسماء)رمزمثالالمعنى (على سبيل المثال)نقطة ترميز يونيكود
مرتفع ناقص [ 14 ]¯¯3يشير إلى عدد سالبU+00AF ¯ ماكرون
مصباح، تعليق⍝This is a commentكل ما يقع على يمين ⍝ يمثل تعليقًاU+235D APL رمز وظيفي UP SHOE JOT
السهم الأيمن، الفرع، الانتقال إلى→This_Label→This_Label يرسل تنفيذ APL إلى This_Label:U+2192 سهم إلى اليمين
تعيين، السهم الأيسر، تعيين إلىB←AB←A يحدد قيم وشكل B ليطابق AU+2190 سهم متجه لليسار

تدعم معظم تطبيقات لغة APL عددًا من متغيرات النظام ووظائفه، والتي عادةً ما تسبقها علامة ⎕ (الرباعية) و/أو علامة ")" ( الخطاف = قوس الإغلاق). تجدر الإشارة إلى أن العلامة الرباعية ليست هي نفسها رمز الحرف المفقود في يونيكود . يُعد المتغير ⎕IO ( أصل الفهرس ) ذا أهمية خاصة ويُستخدم على نطاق واسع ، فبينما اعتمدت لغة IBM APL الأصلية مصفوفاتها على الرقم 1، تعتمد بعض الإصدارات الأحدث على الرقم 0.

جلسة المستخدم مع مترجم لغة APLوصف
X 12 X 1 2 3 4 5 6 7 8 9 10 11 12 ⎕IO 1 X [ 1 ] 1

X set = to vector of 12 sequence int .

قيمة الفهرس الابتدائي ⎕IO = 1. وبالتالي، فإن الموضع الأول في المتجه X أو X[1] = 1 لكل متجه من قيم iota { 1 2 3 4 5 ...}.

⎕IO 0 X [ 1 ] 2 X [ 0 ] 1
تم تغيير قيمة Index Origin ⎕IO الآن إلى 0. وبالتالي، يتغير "موضع الفهرس الأول" في المتجه X من 1 إلى 0. ونتيجة لذلك، يشير X[1] إلى 2 من {1 2 3 4 5 ...} ويشير X[0] الآن إلى 1 .
⎕WA 41226371072
يُظهر متغير النظام الديناميكي Quad WA أو ⎕WA مقدار مساحة العمل المتبقية غير المستخدمة ، أي 41,226 ميجابايت أو حوالي 41 جيجابايت من إجمالي مساحة العمل الحرة المتاحة لبيئة عمل APL والبرنامج للمعالجة. إذا انخفض هذا الرقم أو اقترب من الصفر، فقد يحتاج الحاسوب إلى المزيد من ذاكرة الوصول العشوائي (RAM) أو مساحة أكبر على القرص الصلب أو مزيج منهما لزيادة الذاكرة الافتراضية .
) VARS X
)VARS دالة نظام في APL، [ 15 ] )VARS يعرض أسماء متغيرات المستخدم الموجودة في مساحة العمل الحالية.

تتوفر أيضًا وظائف نظامية للمستخدمين لحفظ مساحة العمل الحالية، مثل (SAVE)، وإنهاء بيئة APL، مثل ( OFF) - وتُسمى أحيانًا أوامر أو وظائف الربط نظرًا لاستخدام قوس أو خطاف في بدايتها. [ 16 ] يوجد قدر من التوحيد القياسي لهذه الوظائف الرباعية ووظائف الربط.

الخطوط

تتضمن لوحة يونيكود الأساسية متعددة اللغات رموز لغة APL في قسم "الرموز التقنية المتنوعة " [ 17 ] ، والتي تُعرض عادةً بدقة من خطوط يونيكود الكبيرة المثبتة مع معظم أنظمة التشغيل الحديثة. ونادرًا ما يُصمم هذه الخطوط من قِبل مصممي خطوط مُلمين برموز APL. لذا، ورغم دقتها، قد تبدو الرموز غير مألوفة لمبرمجي APL أو يصعب تمييزها عن بعضها.

تم تصميم بعض خطوط Unicode لعرض APL بشكل جيد: APLX Upright و APL385 Unicode و SimPL.

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

تعيين وظائف لوحة مفاتيح APL2 إلى الرموز

لوحة مفاتيح APL2
لوحة مفاتيح APL2

لاحظ مفتاح تشغيل/إيقاف لغة APL - المفتاح العلوي الأيمن، أسفله مباشرةً. لاحظ أيضًا أن لوحة المفاتيح تحتوي على حوالي 55 مفتاحًا فريدًا لرموز APL (68 مفتاحًا مُدرجًا في الجداول أعلاه، بما في ذلك الرموز المقارنة، ولكن تظهر بعض الرموز في كلٍ من الجداول الأحادية والثنائية). (55 وظيفة (عامل) من وظائف APL مُدرجة في دليل IBM المرجعي 5110 APL). وبالتالي، باستخدام مفاتيح Alt وShift وCtrl، كان من الممكن نظريًا أن تسمح بحد أقصى يبلغ حوالي 59 مفتاحًا × 4 (بالضغط على مفتاحين) × 3 (بالضغط على ثلاثة مفاتيح، مثل Ctrl-Alt-Del)، أو حوالي 472 تركيبة مفاتيح مختلفة كحد أقصى، وهو ما يقترب من الحد الأقصى لعدد أحرف EBCDIC البالغ 512 حرفًا (256 حرفًا مضروبًا في رمزين لكل تركيبة مفاتيح). مرة أخرى، نظريًا، كانت لوحة المفاتيح الموضحة هنا تسمح بإدخال حوالي 472 رمزًا/وظيفة مختلفة من رموز APL، واستخدامها فعليًا. عمليًا، كانت الإصدارات الأولى تستخدم ما يعادل تقريبًا 55 رمزًا خاصًا من رموز لغة APL (باستثناء الأحرف والأرقام وعلامات الترقيم، وما إلى ذلك). وبالتالي، لم تكن لغة APL في بداياتها تستخدم سوى 11% تقريبًا (55/472) من الإمكانات الكاملة للغة الرمزية في ذلك الوقت، بناءً على حدود عدد مفاتيح لوحة المفاتيح، مع استثناء الأرقام والأحرف وعلامات الترقيم، وما إلى ذلك. من ناحية أخرى، كان استخدام رموز لوحة المفاتيح أقرب إلى 100%، أي عالي الكفاءة، نظرًا لأن ترميز EBCDIC كان يسمح فقط بـ 256 حرفًا مميزًا، بينما كان ترميز ASCII يسمح بـ 128 حرفًا فقط.

حل الألغاز

لقد أثبتت لغة APL أنها مفيدة للغاية في حل الألغاز الرياضية، والتي تم وصف العديد منها أدناه.

مثلث باسكال

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

باسكال { ' ' @ ( 0 =⊢ ) 0 , ⍨¨ a ¨ ⌽∊ ¨ 0 , ¨¨ a ! ¨ a ⌽⍳ } ⍝ أنشئ دالة مستخدم من سطر واحد باسم باسكال باسكال 7 ⍝ شغّل الدالة باسكال لسبعة صفوف واعرض النتائج أدناه: 1 1 2 1 3 3 1 4 6 4 1 5 10 10 5 1 6 15 20 15 6 1 7 21 35 35 21 7

الأعداد الأولية، برهان مضاد عبر العوامل

حدد عدد الأعداد الأولية (العدد الأولي هو عدد طبيعي أكبر من 1 وليس له قواسم موجبة أخرى غير 1 ونفسه) حتى عدد ما N. يُنسب إلى كين إيفرسون الحل التالي المكون من سطر واحد بلغة APL لهذه المشكلة:

⎕CR 'PrimeNumbers' ⍝ عرض دالة المستخدم PrimeNumbers في APL الأعداد الأولية PrimeNumbers N تأخذ الدالة وسيطًا واحدًا N (على سبيل المثال، عرض الأعداد الأولية من 1 إلى N) الأعداد الأولية ( 2 =+ 0 = ( N ) ∘. |⍳ N ) / N ⍝ سطر كين إيفرسون PrimeNumbers 100 ⍝ عرض جميع الأعداد الأولية من 1 إلى 100 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 PrimeNumbers 100 25 ⍝ يوجد خمسة وعشرون عددًا أوليًا في النطاق حتى 100.

غالباً ما نحتاج إلى فحص عكس الحل الرياضي ( العوامل الصحيحة لعدد ما ): أثبت لمجموعة الأعداد الصحيحة من 1 إلى 15 أنها غير أولية عن طريق سرد عوامل تحليلها . ما هي عواملها التي لا تقبل القسمة على 1 (أي الأعداد التي تقبل القسمة على أي عدد آخر غير 1)؟

⎕CR 'ProveNonPrime' Z ProveNonPrime R ⍝ يُظهر جميع عوامل العدد الصحيح R - باستثناء 1 والعدد نفسه، ⍝ أي، يُثبت أنه ليس أوليًا. تُعاد السلسلة 'prime' للعدد الصحيح الأولي. Z ( 0 = ( R ) | R ) / R ⍝ حدد جميع عوامل العدد الصحيح R، وخزنها في Z Z ( ~ ( Z 1 , R )) / Z ⍝ احذف 1 والعدد كعوامل للعدد من Z. ( 0 =⍴ Z ) / ProveNonPrimeIsPrime ⍝ إذا كانت النتيجة على شكل صفر، فليس لها عوامل أخرى وبالتالي فهي عدد أولي Z R , ( " عوامل (باستثناء 1) " ) , ( Z ) , ⎕TCNL ⍝ اعرض العدد R وعوامله (باستثناء 1، ونفسه)، وحرف سطر جديد 0 ⍝ تم الانتهاء من الدالة إذا كان العدد غير أولي ProveNonPrimeIsPrime : Z R , ( " أولي" ) , ⎕TCNL ⍝ تتفرع الدالة هنا إذا كان العدد أوليًاأثبت أن كل عدد من الأعداد الصحيحة من 1 إلى 15 (15) ليس عددًا أوليًا. 1 عدد أولي 2 عدد أولي 3 عوامل ( باستثناء 1 ) 2 5 عدد أولي 6 عوامل ( باستثناء 1 ) 2 3 7 عدد أولي 8 عوامل ( باستثناء 1 ) 2 4 9 عوامل ( باستثناء 1 ) 3 10 عوامل ( باستثناء 1 ) 2 5 11 عدد أولي 12 عوامل ( باستثناء 1 ) 2 3 4 6 13 عدد أولي 14 عوامل ( باستثناء 1 ) 2 7 15 عوامل ( باستثناء 1 ) 3 5

متتالية فيبوناتشي

قم بإنشاء متتالية أعداد فيبوناتشي ، حيث يكون كل عدد لاحق في المتتالية هو مجموع العددين السابقين:

⎕CR 'Fibonacci' ⍝ دالة العرض Fibonacci FibonacciNum Fibonacci Nth ; IOwas ⍝ رأس الدالة، اسم الدالة = Fibonacci، دالة أحادية مع وسيط واحد في اليد اليمنى Nth؛ متغير محلي IOwas، وقيمة عددية مُعادة. ⍝ توليد عدد متسلسل فيبوناتشي حيث Nth هو رقم موضع عدد فيبوناتشي في التسلسل. << وصف الدالة IOwas ⎕IO ⎕IO 0 FibonacciNum 0 1 ↓↑+ . × / Nth / 2 2 1 1 1 0 ⎕IO IOwas ⍝ لكي تعمل هذه الوظيفة بشكل صحيح، يجب ضبط ⎕IO على الصفر.Fibonacci ¨ 14 ⍝ تقول عبارة APL هذه: قم بإنشاء متتالية فيبوناتشي لكل عدد صحيح (¨) (iota أو ⍳) للأعداد الصحيحة من 1 إلى 14. 0 1 1 2 3 5 8 13 21 34 55 89 144 233 ⍝ المتتالية المولدة، أي متتالية فيبوناتشي للأعداد التي أنشأها مترجم APL.

للمزيد من القراءة

  • بوليفكا، ريموند ب.؛ باكين، ساندرا (1975). لغة APL: اللغة واستخدامها . برنتيس هول. ISBN 978-0-13-038885-8.
  • رايتر، كليفورد أ.؛ جونز، ويليام ر. (1990). لغة البرمجة APL مع التركيز على الرياضيات (  الطبعة الأولى). تايلور وفرانسيس. ISBN 978-0534128647.
  • تومسون، نورمان د.؛ بوليفكا، ريموند ب. (2013). APL2 في العمق (سلسلة سبرينغر في الإحصاء) (غلاف ورقي) (إعادة طبع للطبعة الأولى الأصلية  ). سبرينغر. ISBN 978-0387942131.
  • جيلمان، ليونارد؛ روز، ألين ج. (1976). لغة البرمجة التطبيقية: منهج تفاعلي (غلاف ورقي) (  الطبعة الثالثة). وايلي. ISBN 978-0471093046.

انظر أيضاً

مراجع

  1. إيفرسون، كينيث إي. (1962-01-01). "لغة برمجة". وقائع المؤتمر المشترك للحاسوب في ربيع 1-3 مايو 1962 - AIEE-IRE '62 (ربيع) . نيويورك، نيويورك، الولايات المتحدة الأمريكية: ACM. الصفحات 345-351 . doi : 10.1145/1460833.1460872 . S2CID 11777029 .  
  2. بارونيت، دان. "مشغلو لغة البرمجة APL المتميزون" . archive.vector.org.uk . فيكتور - مجلة الجمعية البريطانية للغة البرمجة APL . تم الاطلاع عليه بتاريخ 13 يناير 2015 .
  3. مايكرو إيه بي إل. "المعاملات الأولية" . www.microapl.co.uk . مايكرو إيه بي إل . تم الاطلاع عليه بتاريخ 13 يناير 2015 .
  4. مايكرو إيه بي إل. "المشغلون" . www.microapl.co.uk . مايكرو إيه بي إل . تم الاطلاع عليه بتاريخ 13 يناير 2015 .
  5. بروجوبيديا. "APL" . progopedia.com . بروجوبيديا . تم الاطلاع عليه بتاريخ 13 يناير 2015 .
  6. دايالوج. "دوال D والمعاملات مصنفة بشكل عام في فئات" . dfns.dyalog.com . دايالوج . تم الاطلاع عليه بتاريخ 13 يناير 2015 .
  7. آي بي إم. "دليل مرجعي لـ IBM 5100 APL" (ملف PDF) . bitsavers.trailing-edge.com . آي بي إم. مؤرشف من الأصل (ملف PDF) بتاريخ 14 يناير 2015. تم الاطلاع عليه بتاريخ 14 يناير 2015 .
  8. براون، جيم (1978). "دفاعًا عن فهرس الأصل 0" . ACM SIGAPL APL Quote Quad . 9 (2): 7. doi : 10.1145/586050.586053 . S2CID 40187000 . 
  9. MicroAPL. "دليل لغة APLX" (ملف PDF) . www.microapl.co.uk . MicroAPL - الإصدار 5.0، يونيو 2009، صفحة 22. تاريخ الاطلاع: 31 يناير 2015 . 
  10. بنكارد، ج. فيليب (1992). "المصفوفات المتداخلة والمعاملات: بعض القضايا بالتفصيل". وقائع المؤتمر الدولي حول لغة APL - APL '92 . ACM SIGAPL APL Quote Quad. المجلد 23. الصفحات 7-21 . doi : 10.1145/144045.144065 . ISBN   978-0897914772. S2CID 7760410 . 
  11. بيري، بول "APL\360 Primer Student Text" ، أبحاث IBM، مركز أبحاث توماس ج. واتسون، 1969.
  12. "رسالة" (ملف PDF) . www.cs.utexas.edu . تاريخ الاسترجاع: 10-09-2019 .
  13. كاسون، ستان (13 مايو 2006). "مكتبة مصطلحات APL2" . www-01.ibm.com . شركة IBM . تم الاطلاع عليه في 1 فبراير 2015 .
  14. ينطبق "الطرح العالي" في لغة APL على الرقم الفردي الذي يليه، بينما تقوم دالة الطرح الأحادي بتغيير إشارة المصفوفة بأكملها إلى يمينها.
  15. "مساحة العمل - وظائف النظام" . Microapl.co.uk. ص. (أسفل صفحة الويب) . تم الاطلاع عليه بتاريخ 2018-11-05 . 
  16. "مرجع لغة APL" (ملف PDF) . تم الاطلاع عليه بتاريخ 2018-11-05 .
  17. مخطط يونيكود "مواضيع تقنية متنوعة (بما في ذلك APL)" (PDF) .

دروس تعليمية عامة عبر الإنترنت

قواعد بناء الجملة