/ #معرفة 

لا مساواة بعد اليوم

هل لفت نظرك شيءٌ غريب في صورة الآلة الحاسبة أعلاه؟
أجل! لا يوجد زر للحصول على ناتج العمليات الحسابية (=)، بدلًا منه هناك زرٌ للإدخال Enter.

في مرحلة مُبكّرة من التعليم بدأنا نقرأ الأرقام ونعدّ، ثم شيئًا فشيئًا أصبحنا نعرف الجمع والطرح، وما هي إلا سنوات حتى وجدنا أنفسنا أمام عمليات الاشتقاق، التكامل وتطبيقات سلاسل فورييه. إلا أنّ معظمنا - على الأغلب - لم يعد يلزمه في حياته من الرياضيات إلا ما تعلمناه في الصفوف المدرسيّة الأولى.. فما إن نشاهد التعبير الرياضي 5 + 2 حتى يتبادر الرقم 7 إلى أذاهننا، ليس لسهولة العملية فحسب، بل لأن إصطفاف الأرقام والعمليات بهذا الترتيب تحديدًا يُمثّل ترميزًا رياضيًا نعرف قرائته والتعامل معه.

يمكن القول أن التعبير الرياضي التالي:
((15 ÷ (7 − (1 + 1))) × 3) − (2 + (1 + 1))
يبدو أكثر تعقيدًا بقليل، لكننا مجددًا قادرون على قراءته وفهمه. إلا أنّ أحدًا (على ما أذكر) لم يقل شيئًا عن الترميز التالي:


15 7 1 1 + − ÷ 3 × 2 1 1 + + −

صادفت الصيغة السابقة للمرّة الأولى في كتاب SICP، يومها بدت لي صيغة غير عملية لأبعد الحدود. بحثت عن السبب الذي قد يدفع أحدهم للكتابة بهذه الطريقة، فتعلمت حينها أنّه يمكن كتابة التعابير الرياضية بأساليب مختلفة، أشهرها:

Infix Notation

ويقصد به كتابة العمليات الحسابية بحيث نضع عملية واحدة بين كل معاملين. وهي الطريقة التي تعلمناها في حصص الرياضيات.

Polish Notation

وفيه تُكتب العملية كبادئة للعناصر المطلوب حسابها. بهذه الطريقة أنت لا تحتاج لاستخدام الأقواس.

Reverse Polish Notation

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

تدعم بعض التطبيقات على الحاسوب الأساليب الثلاثة معًا. لغة البرمجة ليسب تعتمد PN أسلوبًا لكتابة العمليات الحسابية، بينما تستخدم حاسبة Calc في إيماكس أسلوب RPN. هذا تحديدًا ما دفعني لتعلم RPN واستخدامه يوميًا، لأجد أنه أكثر متعة وسهولة في الاستخدام.

لإجراء العملية الحسابية السابقة يدويًا سنتبع الخطوات التالية:

  • نبدأ من يمين التعبير الأول 1 1 7 15
  • نطبق العملية الأولى من اليسار + على المعاملين بأقصى اليمين (1 1)، الناتج هو 2
  • الناتج مع الرقم التالي (7) سيخضعان للعملية التالية - الناتج الجديد 5
  • الناتج السابق مع الرقم التالي (15) سيخضعان للعملية التالية ÷ الناتج الجديد 3
  • الآن الناتج السابق مع الرقم التالي (3) والإشارة المجاورة × الناتج الجديد 9
  • وصلنا حاليًا إلى التعبير 1 1 2 9
  • نبدأ مجددًا من أقصى اليمين (1 1) مع العملية من اليسار + لناتج سنستخدمه مع (2) و عملية + المحصلة 4
  • بقي أمامنا 4 9 مع إشارة الطرح والناتج النهائي للتعبير الرياضي السابق هو 5

انظر التفصيل التالي:


15 7 1 1 + − ÷ 3 × 2 1 1 + + − =
15 7     2 − ÷ 3 × 2 1 1 + + − =
15         5 ÷ 3 × 2 1 1 + + − =
             3 3 × 2 1 1 + + − =
                 9 2 1 1 + + − =
                 9 2     2 + − =
                 9         4 − =
                             5 =

تبدو معقدة بعض الشيء؟ انظر لعملية الحساب باستخدام آلة حاسبة من نوع RPN:

  • أدخل الرقم 15 ثم اضغط Enter.
  • أدخل الأرقام 1 1 7
  • الآن اضغط بالتسلسل على + ثم - ثم ÷ هكذا تكون قد حصلت على الرقم 3
  • اضغط على 3 ثم ×
  • أدخل الأرقام 1 1 2 ثم العمليات + + -
  • الناتج النهائي 5

عدم الحاجة لاستخدام الأقواس سهّلت العملية بشكل كبير، مع IN هناك حاجة لإدخال 28 محرف إلى الآلة الحاسبة، مقارنة بـ 15 محرفًا في RPN. انظر الصورة التالية:

../images/2019/rpn.gif

بعض الخصائص الأخرى التي ستستمتع بها مع أسلوب RPN:

  • يمكن معرفة الناتج الجزئي لكل عملية على حدى، بينما لا تعرض آلات IN سوى الناتج النهائي الإجمالي.
  • لا داعي للضغط على إشارة = لمعرفة الناتج. هذا الزر غير موجود أصلًا!
  • السماح بإدخال عدّة عناصر ثم إجراء العمليات عليها يوفّر تخزينها في ذاكرة الآلة الحاسبة عندما لا تتوفر الأقواس بها (معظم الآلات الحاسبة البسيطة لا تحتوي على أقواس).

أعلم أن الحساب بهذه الطريقة يبدو غريبًا وغير مألوفًا، لكن ما إن تجربه قليلًا حتى تجد أن مبدأ العمل أسهل بكثير مما يبدو عليه.

بعض الروابط لتطبيقات تدعم RPN: لينكس، أندرويد، ويندوز، الحاسبة الافتراضية في macOS تدعم وضع RPN.

إن كنت ترغب بشراء آلة حاسبة حقيقية فقد تحتاج للبحث عن واحدة مستعملة، HP مثلا كانت تنتج بعض الأنواع لكن يبدو أنها توقفت.

هذا كل شيء. استمتع!