لغة J تقترب أكثر من الناس

السمة المميزة للغة J هي القدرة على كتابة خوارزميات تكرارية دون استخدام الحلقات والتكرار بشكل صريح. على سبيل المثال ، يتم حل مجموع كل عناصر المصفوفة كـ " +/" ، ومتوسط ​​جميع عناصر المصفوفة هو " +/%#".



نُشرت بالفعل مراجعات مختلفة لـ J على Habré أكثر من مرة. على سبيل المثال في هذه المادة و هذه واحدة .



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



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



وفي الإصدار التاسع من اللغة ، تمت إضافة اتحاد جديد F (سمي على اسم الحرف الأول من كلمة "أضعاف").







للمقارنة ، دعنا نحل المشكلة باستخدام while. واستخدام الاتحاد الجديد.

الشرط بسيط: الحصول على مصفوفة جديدة من المصفوفة الأصلية تحتوي على القيم المضاعفة للعناصر. يتم تحديد طول المصفوفة الجديدة خارجيًا وقد يكون أقل من الأصل.

أول استخدام في حين.



t =: dyad define
c =. 0
i =. i.x
z =. $0
while. -. c = y
do. 
z =. z , (+: (c { i))
c =. >: c
end.
z
)
10 t 5
    0 2 4 6 8


والآن الحل باستخدام الاتحاد الجديد F. دعنا نضيف أن شرط الخروج من الحلقة تم التحقق منه باستخدام الفعل Z:




COUNT =: 6
v=: dyad define
_2 Z: -.* COUNT =: <: COUNT
x
)
'' +: F:. v (i.10)
    0 2 4 6 8


تعد الوثائق بأن F. لن تكون أكثر ملاءمة فحسب ، بل ستكون أسرع أيضًا. في النهاية ، يقترب J من الناس!



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



All Articles