فوكال (لغة برمجة)
FOCAL (اختصار لـ Formulating On-line Calculations in Algebraic Language ، [ 1 ] أو FOrmula CALculator [ 2 ] ) هي لغة برمجة تفاعلية تفسيرية تعتمد على JOSS وتستخدم في الغالب على أجهزة سلسلة PDP من شركة Digital Equipment Corporation (DEC) .
صُممت لغة JOSS لتكون لغة تفاعلية تُمكّن غير المبرمجين من كتابة البرامج بسهولة. تُشبه لغة FOCAL لغة JOSS إلى حد كبير في الأوامر التي تدعمها وبنية اللغة العامة. وتختلف عنها في إزالة العديد من الميزات المتقدمة في JOSS، مثل النطاقات والدوال المُعرّفة من قِبل المستخدم، وذلك لتبسيط المُحلل اللغوي وتقليل استهلاك الذاكرة. كما أُعيد تسمية بعض الكلمات المحجوزة (الكلمات المفتاحية) بحيث تبدأ جميعها بحرف فريد. يُتيح هذا للمستخدمين كتابة البرامج باستخدام عبارات من حرف واحد، مما يُقلل من احتياجات الذاكرة. كان هذا الأمر بالغ الأهمية في جهاز PDP-8 ، الذي كانت ذاكرته محدودة في كثير من الأحيان ببضعة كيلوبايتات .
على غرار JOSS، ولاحقًا BASICs ، كانت FOCAL على PDP-8 بيئة متكاملة تتضمن محرر سطور ، ومترجمًا ، وروتينات إدخال/إخراج . سُميت الحزمة ككل FOCAL-8 ، والتي كانت تعمل أيضًا على PDP-5 و PDP-12 . عند نقلها إلى PDP-11 ، اعتمدت FOCAL-11 الناتجة على نظام التشغيل الأساسي RT -11 لتوفير دعم الملفات وتحريرها. تم تحديث تعريف اللغة مرتين، إلى FOCAL-69 ثم إلى FOCAL-71 مع تعديل طفيف جدًا . كما توفرت نسخة منها لمعالج Intel 8080 .
تُعرف لغة FOCAL بأنها اللغة التي كُتبت بها النسخ الأصلية من ألعاب الفيديو المبكرة Hamurabi و Lunar Lander . وقد نُقلت كلتا اللعبتين لاحقًا إلى لغة BASIC، حيث اكتسبتا شهرةً واسعة. [ 3 ] لم تحظَ FOCAL بشعبية خارج منصة PDP، واختفت إلى حد كبير خلال الانتقال إلى VAX-11 . وشهدت انتعاشًا قويًا في الاتحاد السوفيتي ، حيث استُخدمت أجهزة PDP-11 المُقلدة كحواسيب تعليمية ومنزلية ( سلسلة BK ).
تاريخ
جوس
تم إطلاق نظام JOSS في مايو 1963 على جهاز JOHNNIAC الفريد من نوعه في مؤسسة RAND . وشهد النظام نموًا سريعًا في RAND، وسرعان ما استنفد الجهاز، الذي بُني في الأصل عام 1953، قدراته. تم إيقاف تشغيل JOHNNIAC عام 1966، وأُعيد تطبيق JOSS باسم JOSS-II على جهاز PDP-6 الذي تم شراؤه حديثًا ، وهو أول جهاز "كبير" لشركة Digital Equipment Corporation (DEC). استمر استخدام النظام في النمو، وبحلول عام 1970، كان يستخدمه ما بين 500 و600 مستخدم في جميع أنحاء البلاد، وقد أدى إلى ظهور العديد من الابتكارات، مثل محطات الحاسوب المتنقلة التي يمكن نقلها من غرفة إلى أخرى وتوصيلها بالكهرباء للوصول السريع. [ 4 ]
كان نظام JOSS ذا تأثير بالغ. فقد ظهر بالتزامن مع ظهور تقنية المشاركة الزمنية ، حين كان هناك اهتمام كبير بالتفاعل بين الإنسان والآلة، وشهد استخدام الحواسيب انتشارًا واسعًا. وبينما ركزت معظم أنظمة التشغيل القائمة على المشاركة الزمنية في ذلك الوقت على إدارة حسابات المستخدمين والملفات، تاركةً للمستخدمين مهمة برمجة أنظمتهم الخاصة، وفّر نظام JOSS تحرير الملفات ولغة برمجة في حزمة واحدة. وقد عرضت مؤسسة RAND النظام على عدد كبير من العاملين في هذا المجال. [ 4 ]
اعتبرت شركة DEC جهاز PDP-6 فاشلاً، وألمحت في البداية إلى انسحابها من سوق الحواسيب المركزية. إلا أنها بعد فترة وجيزة، طرحت جهاز PDP-10 ، وهو نسخة مطورة من PDP-6 باستخدام تقنية أشباه موصلات وتغليف أحدث، مما أدى إلى تصميم أبسط وأكثر موثوقية لجهاز مطابق تقريبًا. سمحت مؤسسة RAND لشركة DEC بتوزيع نسخة من برنامج JOSS-II على هذه الأجهزة تحت اسم "الحوار التفسيري الجبري" (AID). [ 5 ]
بؤري
كان جهاز PDP-6 أول حاسوب مركزي من إنتاج شركة DEC ، وقد استغل نظام JOSS كامل طاقته وسعة ذاكرته. كان مبرمجو DEC على دراية بالنظام ومهتمين بنظام JOSS، لكن معظم الحواسيب التي باعتها DEC لم تكن تمتلك القدرة الكافية لتشغيله. قام ريتشارد ميريل ، مطور برنامج FOCAL، بإزالة بعض الميزات من JOSS حسب الحاجة ليتمكن من العمل على مساحة الذاكرة المحدودة لجهاز PDP-8 وغيره من أجهزة 12 بت في تشكيلة DEC. ولتحقيق ذلك، أُجري تغيير جوهري لتقليل كمية البيانات المؤقتة، أو الحالة ، اللازمة لتحليل التعليمات. ومن أبرز آثار هذا القرار أن الشروط أصبحت مقتصرة على التفرعات فقط ، على عكس JOSS حيث يمكن تطبيق الشروط على أي عبارة.
كان التغيير الملحوظ الآخر هو إعادة ترتيب الكلمات المفتاحية بحيث تبدأ كل كلمة بحرف فريد. وقد بسّط هذا الأمر عمل المحلل اللغوي ، الذي كان يحتاج فقط إلى قراءة الحرف الأول من الأمر في سطر التعليمات البرمجية، ثم ينتقل إلى حرف المسافة التالي . بعد ذلك، يقارن المحلل اللغوي ذلك الحرف بقائمة داخلية للكلمات المفتاحية المحتملة، والتي تتكون من حرف واحد لكل كلمة. في المقابل، كان على برنامج JOSS الاستمرار في القراءة حتى يقرأ كلمة الأمر كاملة، ثم يقارنها بقائمة تحتوي على كلمات كاملة. لم يقتصر هذا التغيير على توفير الذاكرة في المحلل اللغوي فحسب، بل مكّن المستخدمين أيضًا من توفير الذاكرة عن طريق كتابة ذلك الحرف فقط، مما قلل من حجم التعليمات البرمجية المصدرية .

صدرت النسخة الأولى من نظام FOCAL عام 1968 لجهاز PDP-8 . وتلتها نسخة محدثة في العام التالي، عُرفت لاحقًا باسم FOCAL-69. وعُرف النظام ككل، بغض النظر عن الإصدار، باسم FOCAL-8 عند نقله إلى أجهزة أخرى من سلسلة 12 بت، بما في ذلك PDP-5 و PDP-12 . وقد لاقى رواجًا واسعًا لكفاءته العالية في استخدام الذاكرة، التي كانت غالبًا محدودة للغاية في هذه الأجهزة إلى بضعة كيلوبايتات . كما تم تشغيل نظام FOCAL-11 المشابه على جهاز PDP-11 باستخدام نظام RT-11 .
كما قدمت شركة Processor Technology نسخة من برنامج 8k FOCAL، مزودة ببرنامج Lunar Lander، لنظام Altair 8800 القائم على معالج Intel 8080. وقد تم توفير هذه النسخة مقابل رسوم نسخ الشريط، بينما تم توفير الشفرة المصدرية مجانًا مع المشتريات الأخرى. [ 6 ]
أساسي
بينما كانت لغة FOCAL تكتسب شعبية على أجهزة DEC، أصبحت لغة BASIC بديلاً أكثر رواجاً على منصات أخرى. وبحلول أواخر الستينيات، بدأت عدة شركات في اختراق معقل DEC للحواسيب الصغيرة ، حيث باعت أجهزة مماثلة تعمل بإصدارات BASIC بتقنية المشاركة الزمنية. ومن أبرز هذه الأجهزة سلسلة HP 2100 ، التي تعمل بنظام HP Time-Shared BASIC . [ 7 ]
انضم ديفيد هـ. أهل مؤخرًا إلى مجموعة PDP-8 التابعة لشركة DEC، بالتزامن مع اهتمام الشركة ببيع الجهاز للمؤسسات التعليمية. ونظرًا لشعبية لغة BASIC في سوق التعليم، ولا سيما مع تزايد مكتبة برامج BASIC التابعة لاتحاد مينيسوتا للحوسبة التعليمية ، وجد أهل صعوبة في بيع الجهاز المزود ببرنامج FOCAL على الرغم من مزاياه. [ 7 ] كما أشار لاحقًا:
كانت لغة FOCAL من شركة DEC تُضاهي لغة BASIC في معظم الجوانب، بل وتتفوق عليها في بعضها، لكنها عانت من عيبٍ كبير: امتناع DEC عن ترخيصها لشركات تصنيع الحواسيب الأخرى. كانت FOCAL تُنافس BASIC بشراسة، إذ كانت متوفرة على حواسيب GE وهانيويل وإتش بي وغيرها. أعتقد أن الأمر انتهى إلى وضعٍ مشابهٍ لوضع سوني وبيتا ماكس. قالت سوني: "بيتا ماكس ملكنا، وهو تنسيق أفضل من VHS"، وهو كذلك بالفعل. لكن بعد ذلك، قالت JVC: "لدينا VHS وتوشيبا. هل ترغبون في استخدامه؟ حسنًا، سنرخصه لكم بسعرٍ زهيد". [ 7 ]
تولى أهل بنفسه مهمة إنتاج نظام BASIC للمنصة، واستعان بشركة علم لاحقًا أنها عبارة عن مبرمج واحد في بروكلين لإنتاج نسخة منها لجهاز PDP-8 ذي سعة 4 كيلو كلمة. بدأت شركة DEC ببيع نسخ مُجمّعة من جهاز PDP-8 مزودة بمحطات طرفية ونظام BASIC ضمن سلسلة "EduSystem"، حيث احتوت الأنظمة الأكبر في السلسلة على نسخ موسعة من BASIC، وفي بعض الحالات، على لغتي FOCAL و FORTRAN أيضًا . كما تم تطوير بعض أنظمة EduSystem القائمة على جهاز PDP-11. [ 8 ]
ثم بدأ أهل بنقل البرامج من لغة فوكال إلى لغة بيسك، ولا سيما لعبة سومر (التي أعاد تسميتها إلى حمورابي )، ونسخة من لعبة الهبوط على القمر ، والعديد من العروض التوضيحية الصغيرة بلغة فوكال. وبدمج عمليات النقل التي قام بها مع مساهمات من مبرمجين خارجيين، تمكن من جمع مواد كافية لنشر شركة دي إي سي كتاب " 101 لعبة حاسوب بلغة بيسك" عام 1973. حقق الكتاب نجاحًا فوريًا، وطُبع ثلاث مرات حتى عام 1975. [ 9 ] [ 7 ]
بحلول منتصف سبعينيات القرن العشرين، أصبحت لغة BASIC ميزة قياسية في جميع أجهزة DEC، وتلاشى استخدام FOCAL. [ 9 ]
النهضة في الاتحاد السوفيتي
تم استنساخ جهاز PDP-11 في الاتحاد السوفيتي خلال سبعينيات القرن العشرين لأغراض عسكرية. وفي ثمانينيات القرن نفسه، تم إنتاج نسخ أحادية الشريحة مشابهة لجهاز LSI-11، مما أدى إلى ظهور سلسلة من أجهزة الكمبيوتر المنزلية المتوافقة مع PDP-11 . ومن أبرز هذه الطرازات سلسلة Electronika BK التي صدرت عام 1985. زُوِّدت هذه الأجهزة في البداية ببرنامج FOCAL على خرطوشة ذاكرة ROM ، [ 10 ] بينما كانت خرطوشة BASIC إضافة اختيارية. أما الطرازات اللاحقة، فقد زُوِّدت ببرنامج BASIC افتراضيًا. [ 11 ]
لغة
يستند الوصف التالي إلى FOCAL-69 كما هو موضح في دليل مرجع لغة FOCAL-8. [ 12 ]
الطرق المباشرة وغير المباشرة
اتبعت FOCAL نموذج JOSS للتفاعل عبر واجهة سطر الأوامر . وقد سمح هذا للمستخدمين بكتابة الأوامر في "الوضع المباشر"، والتي يتم تنفيذها فورًا، أو إضافة رقم السطر كبادئة لها، وفي هذه الحالة تتم إضافتها إلى البرنامج إذا كانت فريدة، أو يتم استبدال التعليمات البرمجية الموجودة إذا تم استخدام نفس الرقم مسبقًا. [ 13 ]
طريقة التشغيل مشابهة لـ " الوضع الفوري " في لغة BASIC مقابل "وضع البرنامج". وهي تختلف عن لغة JOSS، حيث كانت جميع الأوامر، سواءً البرمجية أو المباشرة، تُحفظ وتُحمّل كجزء من مساحة عمل المستخدم. هذا ما سمح لـ JOSS باستخدام أوامر بدون أرقام أسطر، والتي كانت تُستخدم Formللتعريفات ومهام أخرى. افتقرت FOCAL إلى هذه الإمكانية، لذا أصبحت تلك التعليمات التي تتطلب التحميل والحفظ خيارات في أوامر أخرى في وضع البرنامج مثل [ 13 ]Type .
بيانات البرنامج
يجب أن يبدأ كل سطر في برنامج FOCAL برقم سطر. وكما هو الحال في JOSS، فإن أرقام الأسطر هي أعداد ثابتة الفاصلة تتكون من عددين صحيحين مكونين من رقمين مفصولين بنقطة. في FOCAL-8، تتراوح أرقام الأسطر الصالحة من 1.01 إلى 31.99. عند الطباعة، باستخدام الأمر WRITE`focal`، وهو المكافئ في FOCAL للأمر `focal` في BASIC LIST، ستُضاف أصفار بادئة؛ سيُطبع 1.10 على النحو التالي: ` focal` 01.10. هذا يجعل طول جميع أرقام الأسطر خمسة أحرف عند الإخراج، بحيث تتم محاذاة جميع أرقام الأسطر. لا تحتاج العبارات التي تشير إلى هذه الأسطر إلى الأصفار البادئة، على سبيل المثال، `focal` GOTO 1.10. [ 14 ]
يُعرف الرقم الموجود على يسار النقطة باسم "رقم المجموعة". توفر المجموعات مستوىً من تنظيم الكود يفتقر إليه لغات مثل فورتران أو بيسك. كان الاستخدام الأساسي لها هو استخدام مجموعة كإجراء فرعي يمكن استدعاؤه DO، على سبيل المثال، DO 5سيؤدي ذلك إلى الانتقال إلى الإجراء الفرعي المكتوب في المجموعة 5. كما استخدمها المحرر أثناء التحرير، على سبيل المثال، يمكن WRITE 2إنشاء قائمة بالكود في المجموعة 2، أو ERASE 4حذف جميع الأسطر في المجموعة 4. [ 14 ]
يجب أن يبدأ كل سطر بكلمة مفتاحية للأمر متبوعة برقم السطر. [ 14 ] لا يوجد مفهوم "الأمر الافتراضي" كما هو الحال في لغة BASIC مع LETعبارتها الاختيارية. يمكن وضع عدة عبارات في سطر واحد، مفصولة بفواصل منقوطة. عادةً، لا يختلف السلوك عما لو كانت العبارات على أسطر منفصلة، باستثناء حالة حلقات FOR. [ 15 ]
الأوامر
بسأل
يأخذ الأمر ASK(المختصر A) قائمة من السلاسل النصية والمتغيرات، ويطبع السلاسل النصية ويخزن مدخلات المستخدم في المتغيرات. [ 16 ] وهو ما يعادل الأمر في لغة BASIC INPUT.
01.01 اسأل "الاسم"، الاسم 01.02 اسأل عن "الإحداثيات"، س، ص 01.03 اسأل "A1"، "A1"، "أوميغا"، "W"، "T0"، "T0"، "عامل التخميد"، "عامل التخميد"
إذا لم يُدخل المستخدم رقمًا ولكنه أدخل نصًا، فسيقوم النظام بتحويل الحرف الأول إلى رقم حيث "A"=1، "B"=2، إلخ.
تعليق
يُنشئ الأمر COMMENT(المختصر C) تعليقًا. [ 17 ] وهو مُكافئ لأمر BASIC REM. يُدرج الدليل الأصلي CONTINUEالأمر C كمرادف للأمر COMMENT، ويُستخدم لتمييز الأسطر الفارغة، ولكن لا يوجد فرق جوهري بينهما. [ 18 ]
01.01 تعليق: لعبة الصيف، بقلم ريتشارد ميريل
يفعل
يُشغّل الأمر DO(المختصر D) تنفيذ البرنامج الفرعي. وهو يُعادل الأمر `<b>` في لغة BASIC GOSUB. يُشار إلى البرنامج الفرعي إما برقم المجموعة أو رقم السطر. إذا تم تحديد رقم سطر، يُنفّذ ذلك السطر ثم يعود تلقائيًا لمتابعة التنفيذ من العبارة التي تلي `<b>` DO. أما إذا لم يتم تحديد رقم سطر، فيبدأ التنفيذ من السطر الأول من الكتلة ويستمر حتى الوصول إلى نهايتها. RETURNيدعم الأمر `<b>` الخروج المبكر من المجموعة، ولكنه مطلوب فقط للعودة المبكرة منها، وليس في نهايتها. [ 19 ]
01.15 DO 7.24 01.16 DO 8
ل
يُنفّذ الأمر FOR(المختصر F) حلقة تكرارية (for loop ). عند تحديد ثلاثة وسائط، يكون الأول هو القيمة الابتدائية لمتغير الحلقة، والثاني هو مقدار الزيادة، والثالث هو قيمة إنهاء الحلقة. أما إذا تم تحديد قيمتين فقط، فتكون الأولى هي القيمة الابتدائية والثانية هي قيمة الإنهاء، ويتم ضبط مقدار الزيادة على 1. هذا هو نمط حلقات التكرار في لغة فورتران ،DO على عكس لغة بيسك FORحيث يكون مقدار الزيادة هو القيمة الأخيرة، إن وُجدت.
على عكس أجزاء أخرى من اللغة حيث تكون التعليمات المتعددة في السطر الواحد مستقلة، فإن هذه الدالة FORتُنفّذ دائمًا التعليمات التي تليها في السطر الذي يسبق الوصول إلى حد الإنهاء، ثم تنتقل إلى السطر التالي. لذا، يجب أن تكون الحلقات في سطر واحد، أو بدلاً من ذلك، استدعاء روتين فرعي باستخدامها DO. لا يوجد ما يُعادل هذه الدالة في لغة BASIC NEXT. [ 15 ]
01.01 FOR X=1,10; TYPE X,! 01.02 FOR X=0,10,100; DO 2
مثال على حلقة FOR:
01.10 اسأل المدير: "كم تريد أن تقترض من المال؟" 01.20 اسأل "لمدة كم سنة؟"، المدة 01.30 FOR RATE=4.0,.5,10;DO 2.0 01.40 خروج 02.10 حدد الفائدة = رأس المال * (المعدل / 100) * المدة 02.20 اكتب "RATE",RATE," ","INTEREST",INTEREST,!
انتقل إلى
يُنقل الأمر GOTO(المختصر G) تنفيذ البرنامج إلى رقم السطر المحدد. [ 19 ] وهو مطابق للعبارة التي تحمل الاسم نفسه في لغة BASIC. في لغة FOCAL، GOTOيُستخدم الأمر أيضًا لبدء التنفيذ، كما هو الحال في BASIC RUN، ولكن في هذه الحالة، تشير إليه الوثائق باسم G GOبدلاً من G، GOTOعلى الرغم من أن الأمر الأساسي هو نفسه.
01.05 انتقل إلى 1.01 02.90 اكتب !!، "حاول مرة أخرى."،!!!!!؛ انتقل إلى 1.1
لو
يُتيح الأمر IF(المختصر I) فرعًا شرطيًا بناءً على إشارة التعبير. بعد التعبير العددي، يمكن لأمر IF أن يأخذ من سطر واحد إلى ثلاثة أسطر. إذا كان التعبير أقل من صفر، ينتقل التنفيذ إلى السطر الأول؛ وإذا كان يساوي صفرًا، ينتقل إلى السطر الثاني؛ وإذا كان أكبر من صفر، ينتقل إلى السطر الثالث. كانت اللغة تفتقر إلى عوامل نسبية مثل أكبر من، يساوي، وأصغر من. للانتقال إذا كان X > 5، يجب مقارنة X - 5. [ 20 ]
02.20 IF (25-25) 2.4,2.3,2.4 03.01 إذا (X) 3.1، 3.02، 3.1
يمكن اختصار عبارة IF بوضع فاصلة منقوطة (أو نهاية السطر) بعد رقم السطر الأول. على سبيل المثال:
02.20 IF (X)1.8; TYPE "Q" 02.30 IF (X)1.8,2.50 02.40 النوع "P"
في هذه الحالة، سيؤدي الاختبار في السطر 2.20 إلى انتقال البرنامج إلى السطر 1.8 إذا كانت نتيجة الاختبار سالبة، وإلا فسيستمر البرنامج في كتابة الحرف "Q" في وحدة التحكم. أما السطر 2.30 فسينتقل إلى السطر 1.8 أو 2.5 إذا كانت القيمة سالبة أو صفرًا، وإلا فسيستمر البرنامج في كتابة الحرف "P" في وحدة التحكم. [ 20 ]
يترك
يُنهي الأمر QUIT(المختصر Q) تنفيذ البرنامج ويعيد التحكم إلى بيئة التحرير. [ 17 ]STOP وهو ما يعادل الأمر ` or` في لغة BASIC END.
01.10 FOR X=-10,1,10;TYPE X 01.20 خروج
يعود
يُعيد الأمر RETURN(المختصر R) تنفيذ البرنامج الفرعي إلى موقع الاستدعاء. [ 17 ] استخدام هذا RETURNالأمر اختياري في السطر الأخير من البرنامج الفرعي، حيث يعود البرنامج الفرعي في السطر الأخير من المجموعة على أي حال. فيما يلي مثال على برنامج فرعي لتحويل مُطالبة بنعم/لا إلى قيمة.
22.78 تعليق: روتين فرعي "نعم أو لا" 22.80 اسأل "أجب بنعم أو لا؟" 22.82 إذا (AN-0 نعم) 22.84، 22.86 22.84 إذا (AN-0NO)22.8،22.88،22.8 22.86 SET X=2;RETURN 22.88 SET X=1;RETURN
تعيين
يُسند الأمر SET(المختصر S) نتائج التعبير إلى المتغير المحدد. [ 21 ] وهو مكافئ لـ BASIC LET.
01.30 SET PI=3.14156 01.60 حدد الفائدة = رأس المال * (المعدل / 100) * المدة
يكتب
يُتيح الأمر TYPE(المختصر T) إخراج عنصر واحد أو أكثر مفصولة بفواصل. [ 22 ] وهو ما يُعادل الأمر في لغة BASIC PRINT.
يمكن أن تكون العناصر متغيرات، أو سلاسل نصية حرفية محاطة بعلامات اقتباس مزدوجة، أو مجموعة متنوعة من أحرف التحكم. تشمل أحرف التحكم `-` لإخراج سطر جديد !وإرجاع المؤشر إلى بداية السطر، و`-` #لإرجاع المؤشر إلى بداية السطر فقط، و`-` :لعلامة الجدولة. يمكن دمج أحرف التحكم معًا، على سبيل المثال، !!!سيُخرج `-` ثلاثة أحرف إرجاع مؤشر إلى بداية السطر/سطر جديد دون الحاجة إلى فصلها بفواصل. [ 16 ]
اكتب [أرقام، E1، "نص"، !، #، :، $ أو %] ...الإخراج 01.10 اكتب "مرحباً، أنت وسيم. كم تريد أن تقترض من المال؟" 01.50 النوع "INTEREST"،INTEREST،! 01.80 اكتب "الفائدة لـ",المدة,"سنوات",!",هو",الفائدة, "دولارات.",!! 01.90 اكتب "نيويورك"،!، "واشنطن"،!، "أتلانتا"،!، "دالاس"،! 02.10 TYPE "X",X," ","X^2",X^2," ","SQRT",FSQT(X) 03.20 اكتب ".",# 02.20 النوع !!!!!
TYPEتضمنت أيضًا مُحدِّد تنسيق اختياريًا يُشار إليه باستخدام التنسيق yz %x.yz، حيث يُمثل x عدد الأرقام على يسار الفاصلة العشرية، وyz عدد الأرقام على يمينها. وكان التنسيق الافتراضي yz = 8 %8.4، أي بحد أقصى ثمانية أرقام وأربعة على يمين الفاصلة. [ 23 ] على سبيل المثال:
SET A=67823 النوع 6.01، أ = 67823.0 النوع 5، أ = 67823 النوع 8.03، أ = 67823.000 النوع %,أ = 6.7823E4
لاحظ المسافات الإضافية في بداية بعض الأمثلة، والتي تُملأ العرض المحدد بالكامل. استخدام علامة النسبة المئوية (%) وحدها أدى إلى طباعة الناتج بصيغة "الفاصلة العائمة" باستخدام الحرف E. [ 24 ]
تم استخدام رمز تحكم خاص $لعرض جدول بجميع المتغيرات المُعرَّفة وقيمها. سيتم طباعة أول حرفين فقط من الاسم، مع إضافة صفر عند الحاجة. تُطبع عناصر المصفوفات على أسطر منفصلة، ويتم ترقيم المتغيرات التي تحتوي على عنصر واحد فقط (00). على سبيل المثال: [ 25 ]
النوع $ A0(00)=67823
المتغيرات
يمكن أن تبدأ أسماء المتغيرات بأي حرف باستثناء F (حيث أن F محجوز للدوال)، ويمكن أن تحتوي على أي تسلسل من الأحرف والأرقام. مع ذلك، فإن أول حرفين فقط هما المهمان. على سبيل المثال، يشير نموذج الكود التالي من FOCAL: A New Conversational Language [ 26 ] إلى المتغير نفسه باسم DESTINATION ثم DES. داخليًا، يشير كلا المرجعين إلى متغير يُسمى DE.
01.80 اسأل عن الوجهة 02.30 IF (DES-14) 2.4,3.1,2.4
يمكن التعامل مع أي متغير كمصفوفة، مما يسمح باستخدام الفهارس من -2048 إلى 2047.
الرياضيات
تحتوي الدالة البؤرية (FOCAL) على خمسة عوامل رياضية: [ 27 ]
^بالنسبة للأسس - يتم تحويل الأس إلى عدد صحيح مكون من 12 بت*للضرب/للتقسيم+للجمع-للطرح
من الأمور اللافتة في إصدار 1968 من لغة FOCAL أن العمليات الحسابية كانت لها أسبقية مستقلة، كما هو موضح أعلاه. ورغم أن هذا ينطبق بالتأكيد على الأسس والضرب والقسمة، إلا أن هناك بعض الغموض في دليل FOCAL لعام 1968 فيما يتعلق بالجمع والطرح. فعلى وجه التحديد، تم تقديم أمثلة توضح أسبقية العمليات في الضرب والقسمة، ولكن لم تُقدم أمثلة توضح أسبقية العمليات في الجمع والطرح. ومع ذلك، فإن التفسير الحرفي لدليل FOCAL لعام 1968 يشير إلى أن الصيغة SET T=2-3+1ستُقيّم بالترتيب 2-(3+1) وبالتالي تُنتج -2. وهذا يختلف تمامًا عن معظم اللغات، حيث يكون للجمع والطرح أسبقية متساوية، ويتم تقييمهما (2-3)+1 لإنتاج 0. [ 27 ] قد يتسبب هذا في أخطاء دقيقة عند تحويل شفرة مصدر FOCAL إلى أنظمة أخرى.
ومع ذلك، فإن الرمزين + و - لهما نفس الأولوية في FOCAL-69 و FOCAL-71، لذا SET T=2-3+1ينتج عنه 0، كما هو متوقع.
كانت لغة FOCAL فريدة من نوعها في إمكانية استخدام الرموز () و[] و<> بشكل متبادل في التعبيرات الرياضية ضمن أزواج متطابقة لتحديد الأسبقية. [ 27 ] على سبيل المثال، التعبير التالي صحيح:
01.30 SET A=<10*[5+1]*(1+5)>
جميع هذه العناصر لها نفس مستوى الأسبقية وتقرأ من اليسار إلى اليمين عندما تكون في نفس المستوى، لذلك سيتم تقييم هذه العبارة []، ثم ()، ثم <>، لإنتاج 360. [ 27 ]
احتوت اللغة على الوظائف المدمجة التالية: [ 28 ]
FABS()– القيمة المطلقةFATN()– الظل العكسيFCOS()– جيب تمام الزاوية بالراديانFEXP()– أساس طبيعي لقوة الحجةFITR()– الجزء الصحيح من الوسيطFLOG()– اللوغاريتم الطبيعيFRAN()– رقم عشوائيFSGN()– إشارة الوسيط؛ FSGN(0)=1 في FOCAL-69، ولكن FSGN(0)=0 في FOCAL-71 والإصدارات اللاحقةFSIN()– جيب الزاوية المعطاة بالراديانFSQT()– الجذر التربيعي
وظائف الأحرف
أضاف برنامج FOCAL-71 وظيفتين جديدتين لإدخال قيم مكونة من حرف واحد، على غرار ASK ولكن مع إرجاع قيم ASCII.
FINيتوقف البرنامج حتى يقوم المستخدم بكتابة حرف، ثم يعيد رمز ASCII.FOUTيُخرج قيمة ASCII كحرف إلى وحدة التحكم أو الملف
وظائف أخرى
تضمنت FOCAL أيضًا العديد من الوظائف ذات الأغراض الخاصة: [ 29 ]
FADCيقرأ قيمة من محولات التناظرية إلى الرقمية في جهاز PDP-8، مع استخدام رقم القناة كمعامل.FDISمخططات عند موقع Y معينFDXSمخططات عند موقع X معين
أوامر البيئة
تشغيل البرامج
يُستخدم الأمر FOCAL GOTOفي المحرر لبدء تشغيل برنامج. ومع ذلك، جرت العادة على اختصاره إلى GO. وهذا يُعادل الأمر RUNفي لغة BASIC. GOTOكما يُمكن استخدام الأمر في المحرر لبدء التنفيذ من سطر مُحدد.
أوامر التحرير
تُضاف أسطر جديدة إلى البرنامج ببساطة عن طريق بدء الأمر برقم السطر. أوامر التحرير هي ERASE: (الاختصار E)، [ 27 ]MODIFY ، (الاختصار M)، [ 30 ] ، و WRITE(الاختصار W): [ 16 ].
ERASE– تصفير جميع المتغيرات؛ يُستخدم هذا أحيانًا في البرامج لإعادة ضبطهاERASE line number– حذف العبارة عند سطر محددERASE group number– حذف جميع العبارات في مجموعة محددةERASE ALL– حذف برنامج كاملMODIFY line number– السماح بتحرير سطر محددWRITE line number- عرض البيان في سطر محددWRITE group number– عرض جميع العبارات في مجموعة محددةWRITE ALL- عرض برنامج محدد
أوامر الملفات
كان أمر الملف هو OPEN (اختصاره O):
OPEN INPUT [device:][file][,ECHO]– استعد للقراءة من بداية الملفOPEN OUTPUT [device:][file][,ECHO]– الاستعداد للكتابة من بداية الملفOPEN RESTORE INPUT[,ECHO]– استئناف الإدخالOPEN RESTORE OUTPUT[,ECHO]– استئناف الإخراجOUTPUT CLOSE– إخراج البيانات من المخزن المؤقت وإغلاق الملف
أوامر المكتبة
تضمنت لغة FOCAL إمكانية إدارة مجموعات من برامج FOCAL كمكتبة برمجية. يمكن للبرامج استدعاء برامج أخرى بشكل متسلسل باستخدام الأمر `LIBRARY` LIBRARY CALL، أو استدعاء روتين فرعي واحد في برنامج آخر باستخدام الأمر ` LIBRARY GOSUBLIBRARY`. يمكن أن يصل طول أسماء البرامج إلى ستة أحرف. يحتوي الأمر `LIBRARY` (اختصاره L) على الأوامر الفرعية التالية:
LIBRARY DELETE [device:]program name– حذف برنامجLIBRARY LIST [device:][file name]– كتالوجLIBRARY RUN [device:]program name [line number]– قم بتسلسل البرنامج، مع إمكانية استئنافه من رقم سطر محدد.LIBRARY SAVE [device:]program name– حفظ برنامجLIBRARY EXIT– العودة إلى برنامج مراقبة PDP-8
تمت إضافة FOCAL-71:
LIBRARY CALL [device:]program name- تحميل برنامجLIBRARY GOSUB [device:]program name [group number]- استدعاء روتين فرعي في برنامج خارجي
رموز الخطأ
نظرًا لافتقار المفسر إلى مساحة ذاكرة كافية لتخزين رسائل الخطأ، أو حتى جدول بأرقام الأخطاء، استخدم برنامج FOCAL حلًا بديلًا يتمثل في الإبلاغ عن عنوان رمز اكتشاف الخطأ كرقم ثابت. على سبيل المثال، عند اكتشاف خطأ القسمة على صفر ، يُبلغ البرنامج عن ?28.73 @ 01.1028.73، حيث يمثل 28.73 رمز التحقق من هذا الخطأ في صفحة الذاكرة رقم 28 مضافًا إليها إزاحة قدرها 73 كلمة، و01.10 هو رقم السطر الذي حدث فيه الخطأ. كانت صفحات PDP-8 بطول 128 بايت، لذا يُترجم هذا العنوان إلى الموقع 3657.
التغييرات بين الإصدارات
أصدرت شركة DEC ثلاثة إصدارات من برنامج FOCAL لسلسلة PDP-8، الإصدار الأصلي المعروف ببساطة باسم FOCAL، وإصدارين محدّثين هما FOCAL 1969 وFOCAL 1971. كان FOCAL 1969 مطابقًا إلى حد كبير للإصدار الأصلي، بينما مثّل FOCAL 1971 تحديثًا رئيسيًا أضاف معالجة الملفات، ووظائف رياضية جديدة، ومجموعة متنوعة من التغييرات الأخرى. وعلى عكس الإصدارين الأولين اللذين كانا نظامين مستقلين، استند FOCAL 1971 إلى نظام التشغيل OS/8 الناشئ (الذي كان يُعرف آنذاك باسم PS/8) واعتمد عليه بشكل أكبر في معالجة الملفات وتحريرها.
فوكال، 1971
أحد التغييرات في الإصدار الجديد هو إضافة حزمة حسابية من عشرة أرقام لزيادة الدقة. FSGNأصبحت الدالة الآن تُرجع الصفر إذا كانت قيمة التعبير المُدخل تساوي صفرًا، بينما كانت تُرجع سابقًا واحدًا. FRANتستخدم الدالة الآن خوارزمية أفضل تُنتج أرقامًا موزعة بشكل عشوائي أكثر. كما أُضيفت FINدالة جديدة تأخذ سلسلة نصية وتُرجع قيمتها ASCII (على غرار دالة BASIC ASC)، ودالة FOUTأخرى تأخذ رقمًا وتُرجع سلسلة نصية تحتوي على ذلك الرقم ASCII CHR.
بما أن كل هذه الخيارات استهلكت ذاكرة محدودة، فعند بدء تشغيل FOCAL، 1971، دخل في مربع حوار يسأل المستخدم عن الميزات التي يريد استخدامها.
مقارنة مع JOSS
يُعدّ FOCAL، عمليًا، نسخةً مُحسّنة من JOSS، مع تغييراتٍ تجعل بناء الجملة أكثر اختصارًا وأسهل في التحليل. تتطابق جميع أوامر FOCAL تقريبًا مع أوامر JOSS، ولا تختلف إلا في التفاصيل. التغيير الأبرز للوهلة الأولى هو أن JOSS لا يُميّز بين الأحرف الكبيرة والصغيرة، ويُخرج الكلمات المفتاحية بأحرف كبيرة وصغيرة، بينما كان FOCAL يُخرجها بأحرف كبيرة فقط. إضافةً إلى ذلك، تنتهي عبارات JOSS بنقطة، مما يجعلها تبدو كعبارات مكتوبة، بينما لا يشترط FOCAL وجود نهاية سطر.
يتمثل أحد الاختلافات الرئيسية في أن JOSS تضمنت مجموعة كاملة من عمليات المقارنة ونظام منطق بولياني يعمل ضمن بنيات ` ifand` for. علاوة على ذلك، يمكن تطبيق التفرعات والحلقات على أي عبارة، على عكس FOCAL، حيث كانت العملية الوحيدة التي يمكن لأي منهما تنفيذها هي ما يعادل `goto`. على سبيل المثال، في JOSS، يمكن للمرء:
1.10 النوع أ إذا كانت قيمة X أكبر من 10. 1.20 اكتب i لـ i=1(1)10.
يطبع السطر الأول الحرف A اختياريًا بناءً على قيمة X، بينما يطبع السطر الثاني الأرقام من 1 إلى 10. في المقابل، لم تكن لغة FOCAL قادرة على مقارنة القيم، وكانت الحلقات تُنفذ بالانتقال إلى السطر التالي عند اكتمالها. سيكون الكود المكافئ في FOCAL كالتالي:
1.10 IF (X-10),,1.30 1.20 النوع أ! 1.30 FOR I=1,1,10;TYPE I,!
تُسهّل آلية عمل JOSS بناء البنى الشائعة وتُحسّن توافقها مع نوايا المبرمج، على حساب زيادة تعقيد وقت التشغيل. على سبيل المثال، يسمح JOSS بوصف نطاقات الحلقات بطريقة مرنة مثل 1، 2، 3، 10(5)، 50، 75، 78. هذه المرونة لها ثمن؛ ففي FOCAL، يمكن كتابة قيم البداية والنهاية والخطوة في بنية مخصصة في الذاكرة وتحديثها بسهولة أثناء تنفيذ الحلقة، بينما يتطلب JOSS إعادة تقييم تعبير قد يكون، ولكنه غالبًا لا يكون، أكثر تعقيدًا.
لجعل الكود أكثر اختصارًا في FOCAL، كانت التغييرات طفيفة نسبيًا. على سبيل المثال، Do part 20.أصبح JOSS' هو FOCAL الأصغر حجمًا DO 20، بينما Do step 20.1أصبح DO 20.1. كما تم اختصار كلمات الأوامر الرئيسية حيثما أمكن، Demandفأصبح JOSS' هو FOCAL' ASK، وذلك لجعله أقصر وللسماح باستخدام الحرف D بشكل فريد لـ DO.
لتبسيط المحلل اللغوي، تم حذف بعض بنيات JOSS. على سبيل المثال، كان بإمكان JOSS إجراء عمليات إسناد متعددة باستخدام `......`، Set S=P, P=Q, Q=S.بينما كان يجب في FOCAL كتابة هذه العمليات كعبارات منفصلة SET S=P; SET P=Q; SET Q=S. وبالمثل، تم دمج `...`، المستخدمة في JOSS Formلتنسيق المخرجات، في `...` TYPEالخاصة بـ FOCAL %.
مقارنة مع لغة BASIC
كانت المقارنات بين لغتي FOCAL وBASIC حتمية، نظرًا لانتشارهما على الحواسيب الصغيرة في نفس الحقبة، وتشابههما الكبير في القواعد والبنية. في معظم الحالات، يتم تحويل شيفرة FOCAL مباشرةً من وإلى BASIC. على سبيل المثال، لطلب إدخال قيمة من المستخدم، في FOCAL يتم تنفيذ ما يلي:
اسأل "كم عمرك؟"
أما في لغة BASIC، فالمكافئ هو:
أدخل "ما هو عمرك؟" ، العمرباستثناء بعض الميزات التي كانت مفقودة من إحداهما أو الأخرى، وبعض الاختلافات الطفيفة نسبياً في بناء الجملة، فإن اللغتين متشابهتان للغاية.
يُعدّ استخدام `goto` في لغة BASIC استثناءً بارزًا IF، حيث سمح بوضع أي عبارة بعد `goto` THEN، مما جعله أقرب إلى هياكل التحكم في JOSS. وقد عكست BASIC ترتيب التعليمات البرمجية مقارنةً بـ JOSS، حيث وضعت التعبير الشرطي في بداية السطر بدلًا من نهايته؛ ففي BASIC يُستخدم `goto` IF this THEN thatبينما في JOSS يُستخدم `goto` that IF this. أما في FOCAL، IFفكانت `goto` أشبه بـ `goto` المحسوبة في BASIC ، ولكن `goto` سمحت بأي عدد من الأسطر كأهداف، بدلًا من ثلاثة أسطر فقط للسالب والصفر والموجب كما في FOCAL.ONXGOTO10,20,30ON...GOTO
يتمثل أحد الفروق الرئيسية الأخرى بين اللغتين في أن لغة FOCAL كانت تفتقر إلى دعمٍ مُدمجٍ للسلاسل النصية كعناصر بيانات يُمكن إسنادها إلى متغيرات. وكما كان الحال في الإصدارات الأولى من لغات BASIC أو FORTRAN قبل إضافة دعم السلاسل النصية (في F77)، كان يتم تجاوز هذا القيد عمومًا باستخدام السلاسل النصية الحرفية في أوامر الإدخال والإخراج. ولم يُصبح هذا الأمر مشكلةً حقيقيةً إلا عند التعامل مع سلاسل نصية مُفردة، أو أحرفٍ مُحددةٍ فيها.
نظرًا لعدم دعم متغيرات السلاسل النصية، كان إدخال السلاسل النصية يعتمد على حل بديل يحوّل أي حرف يُدخله المستخدم إلى قيمته العددية. على سبيل المثال، إذا كتب المستخدم HELLOعبارة إدخال، فإن برنامج FOCAL سيحوّل الحرف H إلى "8"، وهي القيمة العددية للحرف "H" في رموز الأحرف الستة بت الخاصة بجهاز PDP-8 ("H" هو الحرف الثامن). ثم سيفسر الحرف "E" على أنه بداية أس، ثم سيحاول حساب "8" مرفوعًا إلى القوة "LLO"، وهو ما سيستغرق عدة ثوانٍ من وقت وحدة المعالجة المركزية وينتج عنه قيمة 0.76593020E+103، وهي قيمة غير مفيدة. ومع ذلك، من خلال طرح أسئلة تُجاب باستخدام أحرف مفردة، مثل "هل تحتاج إلى تعليمات، نعم أم لا؟"، يمكن للمبرمجين اختبار النتيجة مقابل قيم الأحرف المعروفة لإنتاج ما يشبه مدخلات الأحرف.
إضافة الصفر إلى بداية سلسلة نصية سيحولها إلى قيمة عددية، لذا يمكن للبرامج اختبار سلاسل نصية محددة متعددة الأحرف باستخدام عبارات IF، مثل I (A-0BROWN) 1.00,2.00,1.00تلك التي ستعطي نتيجة 2.00 إذا كانت A = "BROWN" أو 1.00 في غير ذلك. مع ذلك، سيُظهر البرنامج خطأ تجاوز السعة إذا أدخل المستخدم نصًا يحتوي على أحرف 'E' في غير موضعها الصحيح. على سبيل المثال، يمكن اختبار "BROWN" أو "RED" ولكن ليس "GREEN" أو "YELLOW".
استخدمت لغة FOCAL في تطبيقها على معالج PDP-8 تمثيلًا للفاصلة العائمة ، حيث مثّلت الأرقام بأربع كلمات من 12 بت، أي 48 بتًا إجمالًا، منها 36 بتًا للكسر و12 بتًا للأس. وقد أتاح هذا دقة أعلى بكثير ونطاقًا أوسع للقيم مقارنةً بمعظم المفسرات المعاصرة، مما جعل FOCAL خيارًا مناسبًا للعمليات الحسابية المعقدة. وبفضل هذه الدقة العالية، وخيارات تنسيق الإخراج العشري الافتراضية الجيدة، لم تكن صعوبات التقريب من النظام الثنائي إلى النظام العشري واضحة للمستخدمين المبتدئين. وللمقارنة، استخدمت لغة Microsoft BASIC في البداية تنسيق 32 بت ، ثم وسّعت الإصدارات اللاحقة هذا التنسيق إلى 40 بتًا. وقد واجهت معظم لغات BASIC مشاكل في التقريب، مما أدى إلى معادلات بسيطة ينتج عنها بواقي صغيرة غير صفرية.
من المتفق عليه عمومًا أن لغة FOCAL كانت أكثر كفاءة في استخدام الموارد من أنظمة BASIC المماثلة. فعلى جهاز نموذجي في ذلك الوقت، غالبًا ما كان مزودًا بذاكرة ذات نواة مغناطيسية تتراوح سعتها بين 6 و24 كيلوبايت ، كانت FOCAL قادرة على التعامل مع مهام برمجة أكبر وأكثر تعقيدًا من BASIC.
الإصدارات والنسخ المشتقة
استخدمت شركة كوكاكولا نسخة معدلة من فوكال تسمى كوكاكولا.
تم تطبيق FOCAL لاحقًا على PDP-7 و PDP-9 و PDP-10 و PDP-11 و PDP-12 و PDP-5 و LINC-8.
أظهر دليل FOCAL كيفية إضافة أوامر إلى محلل FOCAL، لذلك أضافت العديد من المواقع أوامر متخصصة لتشغيل الأجهزة المخصصة.
قامت جمعية مستخدمي الحواسيب التابعة لشركة ديجيتال إكويبمنت بجمع العديد من التصحيحات والتحسينات لبرنامج فوكال. بل وظهرت نسخ محسّنة رئيسية من فوكال، مثل فوكال-دبليو، التي أضافت العديد من الميزات، بما في ذلك تحسين عمليات إدخال/إخراج ملفات التخزين الضخمة وحتى ذاكرة المتغيرات الافتراضية.
في منتصف سبعينيات القرن الماضي، كان برنامج دلتا نسخةً أكثر تطوراً من برنامج فوكال. تراوحت أرقام أسطر البرنامج من 00 إلى 99 (أجزاء) ومن 000000 إلى 999999 (خطوات)، وتُنفذ هذه الأرقام بترتيب أبجدي رقمي. احتوى برنامج دلتا على بعض الأوامر المتخصصة لجهاز عرض الإشارات تيكترونيكس 4010/14.
في روسيا ، استُخدمت هذه التقنية حتى أوائل التسعينيات في أجهزة الكمبيوتر المنزلية المنتجة بكميات كبيرة من سلسلة Electronika BK .
باعت مايكروسوفت نسخة من برنامج FOCAL مُقدمة على شريط ورقي. [ 31 ] ووفقًا لريموند تشين، فإن الشريط الأصلي مفقود، ولم يعد برنامج FOCAL متوفرًا.
مثال على التعليمات البرمجية
يُعدّ برنامج Lunar Lander الأصلي مثالًا ممتازًا لدراسة لغة FOCAL، إذ يستخدم معظم خصائصها. هذا الكود مأخوذ من البرنامج الأصلي، والموجود على صفحة Lunar Lander الخاصة بجيم ستورر . [ 32 ]
01.04 T "التحكم في استدعاء وحدة القمر. التحكم اليدوي ضروري"! 01.06 T "يمكنك إعادة ضبط معدل الوقود K كل 10 ثوانٍ إلى 0 أو أي قيمة"! 01.08 T "بين 8 و 200 رطل/ثانية. لديك 16000 رطل من الوقود. تقديري"! 01.11 T "زمن تأثير السقوط الحر - 120 ثانية. وزن الكبسولة - 32500 رطل"! 01.20 T "أول فحص راداري قادم"!!!;E 01.30 T "بدء إجراءات الهبوط"!"الوقت، بالثواني، الارتفاع،" 01.40 T "ميل + قدم السرعة، ميل في الساعة الوقود، رطل معدل استهلاك الوقود"! 01.50 SA=120;SV=1;SM=32500;SN=16500;SG=.001;SZ=1.8 02.10 T " ",%3,L," ",FITR(A)," ",%4,5280*(A-FITR(A)) 02.20 T %6.02"، "،3600*V،" "،%6.01،MN،" K = ";AK;ST=10 02.70 T %7.02;I (200-K)2.72;I (8-K)3.1,3.1;I (K)2.72,3.1 02.72 T "غير ممكن"؛ FX=1,51؛ T "." 02.73 T "K=";AK;G 2.7 03.10 I (MN-.001)4.1;I (T-.001)2.1;SS=T 03.40 I ((N+S*K)-M)3.5,3.5;SS=(MN)/K 03.50 D 9;I (I)7.1,7.1;I (V)3.8,3.8;I (J)8.1 03.80 D 6;G 3.1 04.10 T "نفاد الوقود عند"، لتر، ثانية"! 04.40 SS=(FSQT(V*V+2*A*G)-V)/G;SV=V+G*S;SL=L+S 05.10 T "على سطح القمر" L " ثانية"!؛ SW=3600*V 05.20 T "سرعة الاصطدام" واط "ميل في الساعة"! "الوقود المتبقي: "من" رطل"! 05.40 I (1-W)5.5,5.5;T "هبوط مثالي! (محظوظ)!";G 5.9 05.50 I (10-W)5.6,5.6;T "هبوط جيد - (يمكن أن يكون أفضل)"!;G 5.9 05.60 I (22-W)5.7,5.7;T "تهانينا على الهبوط السيئ!";G 5.9 05.70 I (40-W)5.81,5.81;T "تلف المركبة. حظًا سعيدًا!";G 5.9 05.81 I (60-W)5.82,5.82;T "هبوط اضطراري - لديك 5 ساعات من الأكسجين"!;G 5.9 05.82 T "آسف، لكن لم يكن هناك ناجون - لقد أفسدت الأمر!"!" في " 05.83 T "حقيقة أنك فجرت فوهة قمرية جديدة،"W*.277777،" قدم.عمق." 05.90 T !!!!"حاول مرة أخرى؟"! 05.92 أ "(الإجابة: نعم أو لا)"P;I (P-0NO)5.94,5.98 05.94 I (P-0YES)5.92,1.2,5.92 05.98 T "التحكم بالخارج"!!!;Q 06.10 SL=L+S;ST=TS;SM=MS*K;SA=I;SV=J 07.10 I (S-.005)5.1;SS=2*A/(V+FSQT(V*V+2*A*(GZ*K/M))) 07.30 D 9;D 6;G 7.1 08.10 SW=(1-M*G/(Z*K))/2;SS=M*V/(Z*K*(W+FSQT(W*W+V/Z)))+.05;D 9 08.30 I (I)7.1,7.1;D 6;I (-J)3.1,3.1;I (V)3.1,3.1,8.1 09.10 SQ=S*K/M;SJ=V+G*S+Z*(-QQ^2/2-Q^3/3-Q^4/4-Q^5/5) 09.40 SI=AG*S*S/2-V*S+Z*S*(Q/2+Q^2/6+Q^3/12+Q^4/20+Q^5/30)
البرنامج مُقسّم بوضوح إلى العديد من الإجراءات الفرعية. كان هذا شائعًا في برامج FOCAL (وJOSS)، حيث سهّل نظام ترقيم الأسطر استخدام هذه البنى. يستخدم هذا البرنامج تسعة إجراءات. يقوم الإجراء الأول، المجموعة 1، ببساطة بطباعة التعليمات باستخدام Tعبارة ype وتعيين القيم الأولية للتشغيل. لا يتم تسجيل كتلة الوقود مباشرةً، بل يتم استخدام الكتلة الحالية Mللوحدة والكتلة الفارغة، Nلذا فإن كمية الوقود المتبقية هي ، M-Nوينفد وقود المركبة عندما M-Nتكون قيمة صفرًا. لاحظ أيضًا عبارة Erase في نهاية السطر 01.20 ، والتي تُعيد ضبط جميع قيم المتغيرات.
تُشغَّل حلقة اللعبة الرئيسية بواسطة المجموعة 2. أثناء التشغيل الأول، ينتقل البرنامج من المجموعة 1 إلى المجموعة 2، وتُطبع القيم الأولية في السطرين الأولين. قرب نهاية السطر 2.20 ، يُطلب من المستخدم Aإدخال معدل الاحتراق K، ثم يُعاد ضبط مؤقت الحلقة S T=10. يختبر السطر 2.70 إدخال المستخدم مقابل عدة احتمالات، فإذا كان أكبر من 200 أو أقل من 8، فإنه يكتب "غير ممكنثم سلسلة من النقاط، ثم يعود البرنامج ليطلب من المستخدم المحاولة مرة أخرى. إذا كانت القيمة بين هاتين القيمتين، ينتقل البرنامج إلى المجموعة 3. لاحظ أن الإمكانيات المحدودة IFلأمر FOCAL واضحة هنا، ففي لغة BASIC يمكن اختصار هذا الأمر إلى أمر واحد.IFK>200ORK<8THEN...
تختبر المجموعة 3 أولًا ما إذا كان الوقود قد نفد، وتنتقل إلى المجموعة 4 إذا كان كذلك. ثم تختبر ما إذا كانت فترة العشر ثوانٍ Tقد انقضت، وإذا كان الأمر كذلك، تعود إلى السطر 02.10 وتطبع كل شيء مرة أخرى، مما يؤدي إلى إعادة ضبط T و S إلى 10. يختبر السطر 03.40 ما إذا كانت كمية الوقود المحترقة خلال هذه الفترة، ، ستُقلل كتلة المركبة ككل، ، إلى ما بعد وزنها فارغة، N. إذا لم يكن الأمر كذلك، ينتقل إلى الخطوة التالية، وإذا كان الأمر كذلك، فإنه يضبط مؤقت الحلقة على المدة الزمنية التي سيحترق فيها الوقود المتبقي، وبالتالي يُنهي الحلقة مبكرًا. في كلتا الحالتين، يستدعي المجموعة 9 لتحديث السرعة والموقع. ثم يُكرر العملية على المجموعات 7 و8 و9 حتى تتقارب قيمة I.S*KS*K-M
عند انتهاء مؤقت العشر ثوانٍ، أو عند وصوله إلى نهايته نتيجةً لاختبار الوقود في السطر 03.10 أو اختبار الارتفاع في السطر 07.10 ، ينتقل البرنامج في الحالة الأخيرة إلى المجموعة 4 ثم إلى المجموعة 5، أو ينتقل مباشرةً إلى المجموعة 5. تقوم المجموعة 5 بكتابة نتائج نهاية اللعبة، ثم تسأل المستخدم عما إذا كان يرغب في المحاولة مرة أخرى. إذا رغب في ذلك، ينتقل البرنامج إلى السطر 01.20 لمسح جميع القيم وإعادة طباعة العناوين، وإذا لم يرغب في ذلك، ينتقل البرنامج إلى السطر 05.98 ويتوقف Q.
انظر أيضاً
مراجع
- ↑ دليل 1968 ، ص. 1.1.
- ↑ ديسمبر، 1957 إلى الوقت الحاضر (ملف PDF) . ديسمبر 1978. ص 38.
- ↑ ماكراكين، هاري (29 أبريل 2014). "خمسون عامًا من لغة البرمجة BASIC، التي جعلت الحواسيب شخصية" . مجلة تايم . مؤرشف من الأصل في 5 فبراير 2016. تم الاطلاع عليه في 12 فبراير 2016 .
- 1 2 ماركس، شيرلي (ديسمبر 1971). سنوات جوس: تأملات في تجربة (ملف PDF) (تقرير فني). راند.
- ↑ البرمجة الحوارية باستخدام AID (PDF) . ديسمبر 1970. ص 123.
- ↑ "شاهد نمو نجمك!" . بايت . أبريل 1976. ص 48 .
- 1 2 3 4 Szczepaniak 2014 .
- ↑ دليل نظام التعليم (PDF) . رقمي. 1973. ص. V.
- 1 2 سافيتز 2013 .
- ↑ ستابلتون، ر. أ.؛ غودمان، س. إ. (يونيو 1988). الاتحاد السوفيتي و"ثورة" الحاسوب الشخصي (ملف PDF) (تقرير فني). جامعة أريزونا. ص 8. مؤرشف (ملف PDF) من الأصل بتاريخ 9 مارس 2014. تم الاطلاع عليه بتاريخ 26 أغسطس 2025 .
- ↑ "Elektronika BK-0010" . متحف الحواسيب القديمة .
- ↑ دليل 1968 .
- 1 2 دليل 1968 ، ص. 2.1.
- 1 2 3 دليل 1968 ، ص. 2.7.
- 1 2 دليل 1968 ، ص. 3.7.
- 1 2 3 دليل 1968 ، ص. 3.2.
- 1 2 3 دليل 1968 ، ص. 3.6.
- ↑ دليل 1968 ، ص. أ.1.
- 1 2 دليل 1968 ، ص. 3.4.
- 1 2 دليل 1968 ، ص. 3.5.
- ↑ دليل 1968 ، ص. 3.3.
- ↑ دليل 1968 ، ص. 3.1.
- ↑ دليل 1968 ، ص. 2.2.
- ↑ دليل 1968 ، ص 2.3.
- ↑ دليل 1968 ، ص 2.5.
- ↑ FOCAL: لغة محادثة جديدة . رقمي.
- 1 2 3 4 5 دليل 1968 ، ص. 2.4.
- ↑ دليل 1968 ، ص. 3.10.
- ↑ دليل 1968 ، ص. أ.3.
- ↑ دليل 1968 ، ص. 3.8.
- ↑ "ماذا حدث لمترجم مايكروسوفت فوكال؟" . يوتيوب . ١٦ سبتمبر ٢٠٢٢. تم الاطلاع عليه بتاريخ ١٨ سبتمبر ٢٠٢٢ .
- ↑ "مركبة الهبوط على القمر" . وثائق متعلقة بلعبة الهبوط على القمر .
فهرس
- دليل برمجة FOCAL (ملف PDF) . شركة المعدات الرقمية. 1968.
- شتشيبانياك، جون (1 مايو 2014). "تاريخ أساسي للغة BASIC في عيد ميلادها الخمسين" . غاماسوترا .
- سافيتز، كيفن (أبريل 2013). "ديف أهل وبيتسي أهل" (مقابلة).
روابط خارجية
- شفرة المصدر FOCALمصدر رئيسي للعديد من البرامج، بما في ذلك Lunar Lander وSumer Game وغيرها.
- كتيب ترويجي لفيلم FOCAL 1969 من إنتاج شركة DEC
- مشروع محاكاة تاريخ الحاسوب (يتوفر برنامج Focal للتنزيل مجانًا هنا)
- رابط FTP . www.cozx.com ( FTP ).(للاطلاع على المستندات، راجع صفحة المساعدة: FTP ) إصدار مصدر C يعمل على العديد من أنظمة التشغيل، بما في ذلك لينكس.
- مصدر C لإصدار DOS حديث مناسب للتدريس
- أبراموف VA لغة الحوار FOCAL (بالروسية) ISBN 5-06-001785-0
- أوسيتينسكي إل جي فوكال للحواسيب الصغيرة (باللغة الروسية) ISBN 5-217-00323-5
- البؤري والغبار. (خط) – البؤري في الخارج والداخل. (قيد التنفيذ) (بالروسية)
- Файл справки к фокалу-1б – ملف التعليمات الخاص بـ FOCAL-1B (باللغة الروسية)
- عائلة لغات البرمجة JOSS
- برنامج DEC
- لغات البرمجة التي تم إنشاؤها عام 1968
