الاختزال (نظام الجبر الحاسوبي)

REDUCE هو نظام جبر حاسوبي للأغراض العامة موجه في الأصل نحو التطبيقات في الفيزياء.

بدأ تطوير برنامج REDUCE عام 1963 على يد أنتوني سي. هيرن ؛ ومنذ ذلك الحين، ساهم العديد من العلماء من جميع أنحاء العالم في تطويره. [ 2 ] تم طرح برنامج REDUCE كمصدر مفتوح في ديسمبر 2008، وهو متاح مجانًا بموجب ترخيص BSD معدل على موقع SourceForge . وكان سعره سابقًا 695 دولارًا.

تمت كتابة REDUCE بالكامل بلهجة Lisp الخاصة بها والتي تسمى Standard Lisp، [ 3 ] معبر عنها في بناء جملة يشبه ALGOL يسمى RLISP والذي يستخدم أيضًا كأساس للغة مستوى المستخدم الخاصة بـ REDUCE.

تتوفر تطبيقات REDUCE على معظم إصدارات أنظمة Unix و Linux و Microsoft Windows و Apple Macintosh باستخدام تطبيق أساسي من لغة Portable Standard Lisp (PSL) أو Codemist Standard Lisp (CSL). يوفر CSL REDUCE واجهة مستخدم رسومية . كما يمكن بناء REDUCE على لغات Lisp أخرى، مثل Common Lisp .

سمات

بناء الجملة

لغة REDUCE هي لغة برمجة هيكلية عالية المستوى مبنية على لغة ALGOL 60 (ولكن بدلالات لغة Standard Lisp )، مع أنها لا تدعم جميع قواعد بناء جملة ALGOL 60. وهي مشابهة للغة باسكال ، التي تطورت من ALGOL 60، ولغة Modula ، التي تطورت بدورها من باسكال.

REDUCE هي لغة برمجة حرة ، أي أن المسافات وفواصل الأسطر غير مهمة، ولكن بالتالي يجب فصل عبارات الإدخال عن بعضها البعض، ويجب إنهاء جميع المدخلات إما بفاصلة منقوطة ( ;) أو بعلامة الدولار ( $). الفرق هو أنه إذا نتج عن الإدخال nilقيمة مفيدة (غير فارغة)، فسيتم إخراجها إذا كان الفاصل فاصلة منقوطة ( ;)، بينما ستُخفى إذا كان علامة الدولار ( $). عامل الإسناد هو النقطتان المتساويتان ( :=)، والذي في أبسط استخداماته يُسند إلى المتغير الموجود على يساره قيمة التعبير الموجود على يمينه. مع ذلك، يمكن أن يكون لمتغير REDUCE قيمة فارغة، وفي هذه الحالة يُعرض باسمه، وذلك للسماح بإنشاء ومعالجة التعبيرات الرياضية التي تتضمن متغيرات غير محددة. أبسط طريقة لاستخدام REDUCE هي التفاعلية: اكتب المدخلات بعد آخر موجه إدخال ، ثم أنهِها بفاصلة منقوطة واضغط على مفتاح الإدخال ( Enter )؛ ستقوم REDUCE بمعالجة المدخلات وعرض النتيجة. يوضح ذلك لقطة الشاشة .

المعرفات والسلاسل

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

كُتب كود REDUCE المصدري في الأصل بأحرف كبيرة ، كما هو الحال في جميع لغات البرمجة في ستينيات القرن الماضي. (لذا، يُكتب اسم REDUCE عادةً بأحرف كبيرة). مع ذلك، فإن REDUCE الحديث غير حساس لحالة الأحرف (افتراضيًا)، مما يعني أنه يتجاهل حالة الأحرف، ويُكتب عادةً بأحرف صغيرة. (تم تحويل كود REDUCE المصدري إلى أحرف صغيرة). الاستثناءات لهذه القاعدة هي الحفاظ على حالة الأحرف داخل السلاسل النصية وعندما تسبق علامة تعجب ( !). لذلك، من المتعارف عليه استخدام نمط snake_case (مثل long_name) بدلاً من نمط camel_case (مثل longName) لمعرفات REDUCE، لأن نمط camel_case يضيع بدون استخدام علامات التعجب.

برامج "مرحباً بالعالم"

فيما يلي برنامج REDUCE "Hello, World!" ، وهو قصير للغاية لدرجة أنه يكاد يكون أقصر برنامج من هذا النوع!

"مرحبا بالعالم!" ؛

يعرض الأمر REDUCE الناتج

مرحبا بالعالم!

يستخدم برنامج REDUCE آخر بعنوان "Hello, World!"، وهو أطول قليلاً من النسخة المذكورة أعلاه، مُعرّفًا على النحو التالي

! مرحبا بالعالم !! ؛

يعرض الأمر CSL REDUCE نفس المخرجات الموضحة أعلاه. (قد تقوم واجهات المستخدم الرسومية الأخرى للأمر REDUCE بعرض هذه المخرجات بخط مائل لأنها مُعرِّف وليست سلسلة نصية).

البيانات والتعبيرات

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

هناك طريقتان لتجميع عدة عبارات أو تعابير في وحدة واحدة مكافئة نحويًا لعبارة أو تعبير واحد، وهو أمر ضروري لتسهيل البرمجة الهيكلية . الأولى هي بنية begin... endالموروثة من لغة ALGOL 60، وتُسمى عبارة كتلة أو عبارة مركبة . قيمتها هي قيمة التعبير الذي يلي الكلمة المفتاحية (الاختيارية) return. أما الثانية فتستخدم بنية الأقواس <<... >>، وتُسمى عبارة مجموعة . قيمتها هي قيمة التعبير الأخير (غير المنتهي) فيها. يوضح المثال التالي للبرمجة الإجرائية كلا الطريقتين .

البرمجة الهيكلية

يدعم الأمر REDUCE العبارات الشرطية والتكرارية، والتي يتم التحكم في بعضها بواسطة تعبير منطقي ، وهو أي تعبير يمكن أن تكون قيمته إما صحيحة أو خاطئة ، مثلx>0{\displaystyle x>0}. (لا تدعم لغة REDUCE على مستوى المستخدم بشكل صريح الثوابت التي تمثل صحيح أو خطأ، على الرغم من أنه كما هو الحال في لغة C واللغات ذات الصلة، فإن 0 لها القيمة المنطقية خطأ ، بينما 1 والعديد من القيم الأخرى غير الصفرية لها القيمة المنطقية صحيح .)

العبارات الشرطية: إذا ... ثم ... وإلا

تأخذ العبارة الشرطية الشكل التالي:

ifعبارة تعبير منطقيthen

والتي يمكن أن يتبعها اختيارياً

elseإفادة

على سبيل المثال، تضمن العبارة الشرطية التالية أن قيمةن{\displaystyle n}، بافتراض أنها قيمة عددية، فهي موجبة. (إنها تُنفذ فعلياً دالة القيمة المطلقة .)

إذا كان n < 0 فإن n : = -n

العبارة الشرطية التالية، المستخدمة كتعبير، تتجنب الخطأ الذي قد ينتج عن القسمة على صفر.

recip_x := إذا كانت x = 0 فإن القيمة تساوي ما لا نهاية، وإلا فإن القيمة تساوي 1 / x

عبارات التكرار: لـ ...

العبارة forعبارة عن بنية تكرارية مرنة تُنفذ العبارة بشكل متكرر، ويجب معرفة عدد مرات تنفيذها مسبقًا. أحد أشكالها هو:

forالمتغير  := الزيادة الأولية العبارة النهائيةstepuntildo

حيث يُشير المتغير إلى متغير يمكن استخدام قيمته داخل العبارة ، وتكون القيم الابتدائية والزيادة والنهائية أعدادًا (يفضل أن تكون أعدادًا صحيحة). تُهيأ قيمة المتغير إلى القيمة الابتدائية ، ثم تُنفذ العبارة ، وبعد ذلك تُزاد قيمة المتغير بشكل متكرر بمقدار الزيادة ، ثم تُنفذ العبارة مرة أخرى، بشرط ألا تتجاوز قيمة المتغير القيمة النهائية . ويمكن اختصار الحالة الخاصة الشائعة " ابتدائية step 1 untilنهائية " إلى " ابتدائية  : نهائية ".

العبارة التالية forتحسب قيمةن!{\displaystyle n!}كقيمة للمتغير fac.

ن := 5 ; fac := 1 $ لـ r := 2 : n do fac := fac * r ; القوات المسلحة الكونغولية ;

توجد صيغة أخرى للعبارة forتُكرر عناصر قائمة، doويمكن استبدال الكلمة المفتاحية بـ `<t>` productأو `<t> sum` collectأو join`<t>`، وفي هذه الحالة forتُصبح العبارة تعبيرًا وتُعامل العبارة المُتحكَّم بها كتعبير. مع product`<t>`، تكون القيمة هي حاصل ضرب قيم العبارة المُتحكَّم بها ؛ ومع sum`<t>`، تكون القيمة هي مجموع قيم العبارة المُتحكَّم بها ؛ ومع `<t> collect`، تكون القيمة هي قيم العبارة المُتحكَّم بها مُجمَّعة في قائمة؛ ومع `<t>` join، تكون القيمة هي قيم العبارة المُتحكَّم بها ، والتي يجب أن تكون قوائم، مُجمَّعة في قائمة واحدة.

العبارة التالية forتحسب قيمةن!{\displaystyle n!}بشكل أكثر إيجازًا وأناقة من المثال السابق.

n := 5 ; for r := 2 : n product r ;

عبارات التكرار: بينما ... افعل؛ كرر ... حتى

عبارتا التكرار

whiledoبيان التعبير المنطقيrepeatuntil

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

العبارة التالية whileتحسب قيمةن!{\displaystyle n!}كقيمة للمتغير fac. لاحظ أن هذا الكود يتعامل مع عملية الإسناد كتعبير ويستخدم قيمتها.n := n - 1

ن := 5 ; fac := n $ while n > 1 do fac := fac * ( n := n - 1 ); القوات المسلحة الكونغولية ;

تعليقات

يحتوي الأمر REDUCE على ثلاثة اصطلاحات للتعليق. وهو يرث عبارة التعليق من لغة ALGOL 60، والتي تبدو كالتالي:

هذا تعليق متعدد الأسطر وينتهي ذلك عند الفاصل التالي، لذا لا يمكن أن يحتوي على فواصل؛

تظهر عبارات التعليق في الغالب في التعليمات البرمجية القديمة.

يرث هذا %التعليق ... من لغة ليسب القياسية، والذي يبدو كالتالي:

% هذا تعليق من سطر واحد ينتهي عند نهاية السطر. % يمكن أن يظهر في سطر بعد الكود و يمكن أن تحتوي النسبة المئوية (%) على الفواصل ";" و "$".

%... التعليقات مماثلة لـ C++// ... التعليقات وهي الشكل الأكثر استخدامًا للتعليقات.

يدعم REDUCE أيضًا تعليقًا على نمط لغة C يبدو كالتالي:/**/

/* هذا تعليق متعدد الأسطر يمكن تظهر في أي مكان يمكن أن تظهر فيه مساحة و يمكن أن تحتوي على الفواصل ";" و "$". */

نماذج البرمجة

تدعم لغة REDUCE على مستوى المستخدم العديد من نماذج البرمجة ، كما هو موضح في أمثلة البرمجة الجبرية أدناه.

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

أمثلة على البرمجة الجبرية

تُظهر لقطة الشاشة استخدامًا تفاعليًا بسيطًا.

كمثال برمجي بسيط، لنأخذ في الاعتبار مشكلة حسابن{\displaystyle n}متعددة حدود تايلور من الدرجة n للدالةو(x){\displaystyle f(x)}بخصوص النقطةx=أ{\displaystyle x=a}، والتي تُعطى بالصيغةر=0نو(ر)(أ)ر!(x-أ)ر{\displaystyle \sum _{r=0}^{n}{\frac {f^{(r)}(a)}{r!}}(xa)^{r}}. هنا،و(ر){\displaystyle f^{(r)}}يشير إلىر{\displaystyle r}المشتقة منو{\displaystyle f}تم التقييم عند النقطةأ{\displaystyle a}ور!{\displaystyle r!}يرمز إلى مضروب العددر{\displaystyle r}(مع ذلك، تجدر الإشارة إلى أن REDUCE يتضمن مرافق متطورة لتوسيع سلسلة الطاقة .)

كمثال على البرمجة الوظيفية في REDUCE، إليك طريقة سهلة لحساب متعددة حدود تايلور الخامسة لـالخطيئةx{\displaystyle \sin x}حوالي 0. ​​في الكود التالي، rيأخذ متغير التحكم قيمًا من 0 إلى 5 بخطوات مقدارها 1، و هو عامل التفاضلdf REDUCE ، ويقوم العامل باستبدال وسيطه الأول في وسيطه الثاني. لاحظ أن هذا الكود مشابه جدًا للصيغة الرياضية أعلاه (معsubن=5{\displaystyle n=5}وأ=0{\displaystyle a=0}).

for r := 0 : 5 sum sub ( x = 0 , df ( sin x , x , r )) * x ^ r / factorial r ;

ينتج بشكل افتراضي المخرجات [ 4 ]

x(x4-20x2+120)120{\displaystyle {\frac {x\left(x^{4}-20x^{2}+120\right)}{120}}}

هذا صحيح، لكنه لا يشبه متسلسلة تايلور. يمكن إصلاح ذلك بتغيير بعض مفاتيح التحكم في المخرجات، ثم تقييم المتغير الخاص wsالذي يرمز إلى مساحة العمل ، ويحتوي على آخر تعبير ناتج غير فارغ.

إيقاف allfac ؛ تشغيل revpri ، div ؛ ws ؛
x-16x3+1120x5{\displaystyle x-{\frac {1}{6}}x^{3}+{\frac {1}{120}}x^{5}}

كمثال على البرمجة الإجرائية في REDUCE، إليك إجراء لحساب متعددة حدود تايلور العامة، والتي تعمل مع الدوال التي تتصرف بشكل جيد عند نقطة التوسع.أ{\displaystyle a}.

الإجراء my_taylor ( f , x , x0 , n ); % إرجاع متعددة حدود تايلور من الرتبة n للدالة f % كدالة لـ x حول x0. ابدأ scalar result := sub ( x = x0 , f ), mul := 1 ; for r := 1 : n do << f := df ( f , x ); mul := mul * ( x - x0 ) / r ; result := result + sub ( x = x0 , f ) * mul >> ; return result end ;

يُستدعى هذا الإجراء my_taylorلأن REDUCE يتضمن بالفعل عاملًا يُسمى taylor. كل النص الذي يلي %علامة حتى نهاية السطر هو تعليق. scalarتُعرّف الكلمة المفتاحية وتُهيئ متغيرين محليينresult و . تُحدد mulالكلمتان المفتاحيتان beginو endكتلة من التعليمات البرمجية التي قد تتضمن متغيرات محلية وقد تُرجع قيمة، بينما تُحدد الرموز <<و >>مجموعة من التعليمات دون تعريف متغيرات محلية.

يمكن استدعاء الإجراء على النحو التالي لحساب نفس متعددة حدود تايلور كما هو مذكور أعلاه.

my_taylor ( sin x , x , 0 , 5 );

معالجة الملفات والحزم

توفر واجهات المستخدم الرسومية لبرنامج REDUCE دعمًا للقوائم لبعض أو كل عمليات معالجة الملفات والحزم الموضحة أدناه.

معالجة الملفات

لتطوير عمليات حسابية غير بسيطة، يُفضّل تخزين شفرة المصدر في ملف وجعل برنامج REDUCE يقرأها بدلاً من الإدخال التفاعلي. يجب أن يكون إدخال REDUCE نصًا عاديًا (وليس نصًا منسقًا كما هو الحال في تطبيقات معالجة النصوص ). أسماء ملفات REDUCE اختيارية. يستخدم برنامج REDUCE امتداد اسم الملف.red للشفرة الرئيسية .tstوملفات الاختبار، ولذلك تُتيح واجهات المستخدم الرسومية لبرنامج REDUCE، مثل CSL REDUCE، عادةً إدخال الملفات بهذه الامتدادات افتراضيًا، ولكن على منصات مثل Microsoft Windows، .txtقد يكون استخدام الامتداد أكثر ملاءمة. يُنصح بإنهاء ملف إدخال REDUCE بالسطر `.

؛نهاية؛

كعلامة لنهاية الملف. هذه سمة تاريخية نوعًا ما، لكنها تتجنب ظهور رسائل تحذيرية محتملة. بالإضافة إلى ذلك، يمكن أن يحتوي ملف الإدخال على أي شيء يُدخل تفاعليًا في الأمر REDUCE.

inملف1 ,ملف2, ...

يُدخل الأمر REDUCE كل ملف من الملفات المُسماة تباعًا، كما لو تم إدخال محتوياتها يدويًا، ثم ينتظر REDUCE إدخالًا يدويًا إضافيًا. إذا كان الفاصل المستخدم لإنهاء هذا الأمر هو فاصلة منقوطة ( )، فسيتم عرض; محتوى الملف كناتج؛ أما إذا كان الفاصل هو علامة الدولار ($ )، فلن يتم عرض محتوى الملف.$

يمكن أن تكون أسماء ملفات REDUCE مطلقة أو نسبية إلى المجلد الحالي؛ عند استخدام واجهة المستخدم الرسومية لـ REDUCE، تكون الأسماء المطلقة أكثر أمانًا لأنها لا توضح المجلد الحالي. يمكن تحديد أسماء الملفات كسلاسل نصية أو معرّفات ؛ عادةً ما تكون السلاسل النصية (بين علامتي اقتباس مزدوجتين) أكثر ملاءمة، لأنه في حال عدم استخدامها، يجب وضع علامة تعجب (') قبل عناصر اسم الملف مثل فواصل المجلدات والنقاط !. لاحظ أن فاصل المجلدات في نظام التشغيل Microsoft Windows ، وهو الشرطة المائلة العكسية ('/ \')، لا يحتاج إلى مضاعفة في سلاسل REDUCE النصية لأنها ليست حرفًا قابلًا للهروب في REDUCE، ولكن REDUCE على نظام التشغيل Microsoft Windows يقبل أيضًا الشرطة المائلة الأمامية (' //') كفاصل للمجلدات.

يمكن توجيه مخرجات الأمر REDUCE إلى ملف بدلاً من الشاشة التفاعلية عن طريق تنفيذ الأمر

outملف;

يمكن إنهاء إعادة توجيه الإخراج بشكل دائم عن طريق تنفيذ الأمر

shutملف;

أو مؤقتًا عن طريق تنفيذ الأمر

out t;

توجد آليات مماثلة لتوجيه نسخة مجمعة من مدخلات REDUCE إلى ملف وتحميل التعليمات البرمجية المجمعة، وهو الأساس لبناء REDUCE ويمكن استخدامه لتوسيعه.

جارٍ تحميل الحزم

يتكون برنامج REDUCE من عدد من الحزم؛ بعضها مُحمّل مسبقًا، وبعضها يُحمّل تلقائيًا عند الحاجة، وبعضها يجب تحميله صراحةً قبل استخدامه. الأمر

load_packageالحزمة 1 ,الحزمة 2, ...

يقوم هذا الأمر بتحميل كل حزمة من الحزم المحددة بالتتابع في برنامج REDUCE. أسماء الحزم ليست أسماء ملفات، بل هي مُعرّفات بسيطة لا تحتاج إلى علامات تعجب، لذا تُدخل عادةً كمُعرّفات، مع إمكانية إدخالها كسلاسل نصية. تتكون الحزمة من ملف واحد أو أكثر من ملفات كود Lisp المُجمّع، load_packageويضمن الأمر تحميل الملفات الصحيحة بالترتيب الصحيح. تختلف أسماء الملفات ومواقعها الدقيقة باختلاف إصدار Lisp المُستخدم في بناء REDUCE، لكن أسماء الحزم تبقى ثابتة.

الأنواع ونطاق المتغيرات

يرث REDUCE النطاق الديناميكي من لغة Lisp، مما يعني أن البيانات لها أنواع، لكن المتغيرات نفسها ليس لها أنواع: نوع المتغير هو نوع البيانات المُسندة إليه. أبسط أنواع بيانات REDUCE هي أنواع Lisp الذرية القياسية مثل المعرفات، وأرقام الآلة (أي الأعداد الصحيحة "الصغيرة" والأعداد العشرية التي يدعمها جهاز الكمبيوتر مباشرةً)، والسلاسل النصية. تُمثَّل معظم أنواع بيانات REDUCE الأخرى داخليًا كقوائم Lisp، حيث carيشير العنصر الأول منها إلى نوع البيانات. على سبيل المثال، مُدخل REDUCE

mat (( 1 , 2 ), ( 3 , 4 ));

يُنتج العرض

(1234){\displaystyle \left({\begin{matrix}1&2\\3&4\end{matrix}}\right)}

والتمثيل الداخلي لهذه المصفوفة هو قائمة Lisp

(mat (1 2) (3 4))

الكائنات الجبرية الرئيسية المستخدمة في REDUCE هي نواتج قسمة كثيرتي حدود قد تكونان متعددتي المتغيرات، والتي قد تكون محدداتها، والتي تسمى النوى ، دوالًا لمتغير واحد أو أكثر، على سبيل المثال المدخلات

z := ( x + y ^ 2 ) / f ( x , y );

يُنتج العرض

z := x+y2و(x،y){\displaystyle z\ \mathrm {:=} \ {\frac {x+y^{2}}{f\left(x,y\right)}}}

تستخدم دالة REDUCE تمثيلين لهذه الكائنات الجبرية. أحدهما يُسمى الشكل البادئ ، وهو ببساطة كود لغة ليسب القياسي للتعبير، وهو مناسب لعمليات مثل الإدخال والإخراج؛ على سبيل المثال لـz{\displaystyle z}إنها

(خارج القسمة (زائد س (أس ص 2)) (fxy))

أما الصيغة الأخرى فتُسمى صيغة القسمة القياسية ، وهي أفضل لإجراء العمليات الجبرية مثل الجمع؛ على سبيل المثال لـz{\displaystyle z}إنها

(!*sq ((((x . 1) . 1) ((y . 2) . 1)) (((fxy) . 1) . 1)) t)

تقوم الدالة REDUCE بالتحويل بين هذين التمثيلين حسب الضرورة، ولكنها تحاول الاحتفاظ بصيغة القسمة القياسية قدر الإمكان لتجنب تكلفة التحويل.

نظرًا لأن المتغيرات ليس لها أنواع، فلا توجد تعريفات لأنواع المتغيرات في لغة REDUCE، ولكن توجد تعريفات لنطاق المتغيرات . يشير نطاق المتغير إلى مدى البرنامج الذي يكون له فيه نفس الدلالة. افتراضيًا، تكون متغيرات REDUCE ذات نطاق عام ، أي أن لها نفس الدلالة في كل مكان، بمعنى أنه بمجرد إسناد قيمة لمتغير، سيتم تقييمه إلى نفس القيمة في كل مكان. يمكن تعريف المتغيرات بحيث يكون نطاقها محدودًا بكتلة معينة من التعليمات البرمجية عن طريق تحديد تلك الكتلة بالكلمتين المفتاحيتين `var` beginو`var` end، وتعريف المتغيرات scalarفي بداية الكتلة، باستخدام الصيغة التالية (كما هو موضح في أمثلة البرمجة الجبرية أعلاه):

beginscalarالمتغير 1 ، المتغير 2 ، ...؛ عباراتend

يمكن أن يتبع كل متغير مُعلن عنه عامل إسناد ( :=) وقيمة ابتدائية. scalarيجب قراءة الكلمة المفتاحية بمعنى "محلي" . ( يُخفي تاريخ REDUCE سبب تسمية "scalar" ، ولكن يُرجح أنه اختير لتمييز المتغيرات المحلية عن المتجهات الرباعية النسبية ومصفوفات غاما ديراك المُعرّفة في حزمة فيزياء الطاقة العالية ، والتي كانت النواة الأصلية لـ REDUCE. [ 2 ] )

scalarيمكن استبدال الكلمة المفتاحية بـ أو integer. realالفرق هو أن integerالمتغيرات تُهيأ افتراضيًا بالقيمة 0، بينما تُهيأ المتغيرات scalarو realافتراضيًا بقيمة لغة ليسب nil(التي قيمتها الجبرية 0 على أي حال). هذا التمييز أكثر أهمية في لغة تنفيذ REDUCE، RLISP، المعروفة أيضًا بالوضع الرمزي أو وضع ليسب . بخلاف ذلك، يُعد هذا مفيدًا كتوثيق للاستخدام المقصود للمتغيرات المحلية.

هناك تعريفان آخران للمتغيرات يُستخدمان فقط في تنفيذ REDUCE، أي في الوضع الرمزي. يتم ترجمة كتلة REDUCE begin... endالموضحة أعلاه إلى صيغة Standard Lisp بواسطة محللprog REDUCE ، ويجب ربط جميع متغيرات Standard Lisp بصيغ ، أو تعريفها . في RLISP، تبدو هذه التعريفات كالتالي:progglobalfluid

fluid '(المتغير 1 المتغير 2 ... )global '(المتغير 1 المتغير 2 ...)

globalلا يمكن إعادة تعريف متغير في نموذج prog، بينما fluidيمكن إعادة تعريف متغير آخر. هذا التمييز عادةً ما يكون ذا أهمية لمترجم لغة ليسب فقط، ويُستخدم لزيادة الكفاءة إلى أقصى حد؛ في التعليمات البرمجية المفسرة، يمكن تخطي هذه التصريحات، وتُعتبر المتغيرات غير المُصرَّح عنها غير مُعرَّفة فعليًا fluid.

الرسومات

يدعم برنامج REDUCE العرض الرسومي عبر gnuplot ، وهي حزمة رسومية مستقلة محمولة مفتوحة المصدر، مضمنة في جميع توزيعات REDUCE الثنائية. تدعم حزمة REDUCE GNUPLOT عرض المنحنيات أو الأسطح المُعرَّفة بواسطة الصيغ و/أو مجموعات البيانات عبر الأمر plot(... ). يُتيح هذا الأمر بعضًا من إمكانيات gnuplot، وليس جميعها. بُنيت حزمتا REDUCE TURTLE وLOGOTURTLE على حزمة REDUCE GNUPLOT، وتدعمان رسومات السلحفاة ثنائية الأبعاد؛ كما تُتيح حزمة LOGOTURTLE إمكانيات إضافية لـ gnuplot، مثل التحكم في اللون وسُمك الخط، والتعبئة، وإضافة التعليقات النصية.

التطبيقات المتاحة والمنصات المدعومة

يتوفر برنامج REDUCE على موقع SourceForge . تُصدر توزيعات ثنائية [ 1 ] عدة مرات في السنة دون جدول زمني محدد، على شكل لقطات من مستودع Subversion ، كما توفر أيضًا لقطات مضغوطة من شفرة المصدر الكاملة. يمكن ضبط SourceForge لإشعار المستخدمين عند توفر إصدار جديد. في عام 2024، صدرت توزيعات ثنائية لأنظمة macOS و Linux ( الأنظمة المبنية على Debian و Red Hat ) و Microsoft Windows بإصدارات 64 بت . تتضمن برامج التثبيت أو تتوفر لكل من CSL-REDUCE وPSL-REDUCE، وقد تتضمن شفرة مصدر REDUCE. يمكن بناء REDUCE من شفرة المصدر على نطاق أوسع من المنصات وعلى أنظمة Lisp أخرى، مثل Common Lisp . [ 5 ]

برامج أخرى تستخدم REDUCE

تستخدم المشاريع التالية الأمر REDUCE:

  • ALLTYPES [ 6 ] (لغة الجبر ونظام النوع) هو نظام نوع جبر حاسوبي مع تركيز خاص على الجبر التفاضلي والمعادلات التفاضلية؛
  • DAISY [ 7 ] (الجبر التفاضلي لتحديد قابلية تحديد الأنظمة) هو أداة برمجية لإجراء تحليل قابلية التحديد الهيكلي للنماذج الديناميكية الخطية وغير الخطية الموصوفة بمعادلات ODE متعددة الحدود أو النسبية؛
  • MTT [ 8 ] (أدوات تحويل النموذج) هي مجموعة من الأدوات لنمذجة الأنظمة الفيزيائية الديناميكية باستخدام منهجية الرسم البياني للرابطة؛
  • Reduce.jl [ 9 ] هو محلل رمزي لإعادة كتابة مصطلحات لغة جوليا باستخدام جبر REDUCE؛
  • يوفر Redlog [ 10 ] (نظام منطق REDUCE) أكثر من 100 وظيفة على صيغ الدرجة الأولى وكان في الأصل مستقلاً ولكنه متاح الآن كحزمة REDUCE؛
  • Pure هي لغة برمجة، تحتوي على روابط لـ REDUCE، مما يوفر بيئة مثيرة للاهتمام للغاية لإجراء العلوم المدعومة بالحاسوب.

انظر أيضاً

مراجع

  1. 1 2 "تقليص الملفات على SourceForge" .
  2. 1 2 هيرن، أنتوني سي. (2005). "REDUCE: الأربعون عامًا الأولى". الجبر والمنطق الخوارزمي: وقائع مؤتمر A3L 2005، 3-6 أبريل، باساو، ألمانيا، تكريمًا للذكرى الستين لميلاد فولكر فايسبفينينغ . مكتبة جامعة باساو.
  3. ^ مارتي، ج. هيرن، AC. جريس، مل؛ جريس سي. (1979/10/01). "تقرير LISP القياسي" . إشعارات ACM SIGPLAN . 14 (10): 48-68 . دوى : 10.1145 / 953997.953999 . ISSN 0362-1340 . 
  4. يفترض ناتج REDUCE الموضح استخدام CSL REDUCE .
  5. "REDUCE Code" . SourceForge . تم الاسترجاع في 2025-01-07 .
  6. "ALLTYPES - لغة جبرية ونظام أنواع" . مؤرشف من الأصل بتاريخ 2024-08-11.
  7. "الجبر التفاضلي لتحديد الأنظمة" . DAISY . تم الاسترجاع في 19 يناير 2025 .
  8. "أدوات تحويل النماذج" . سورس فورج . 4 سبتمبر 2014. تم الاطلاع عليه بتاريخ 19 يناير 2025 .
  9. ريد، مايكل (5 مايو 2017). "Reduce.jl" . جيت هاب . تم الاسترجاع في 25 يناير 2025 .
  10. "الحوسبة باستخدام المنطق" . ريدلوغ . تم الاسترجاع في 19 يناير 2025 .