Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| ''Перед изучением программирования рекомендуется ознакомиться с учебной статьёй «[[Первое знакомство с Каллисто]]»''
| | [[Каллисто]] является расширением входного языка МК-161. Что это означает? Давайте проверим это утверждение на примере простейших классических программ для советских ПМК. Вот простые, но широко известные программы для вычисления гиперболических функций из 3 изд. справочника проф. Дьяконова. |
| | |
| | |
| [[Каллисто]] является расширением [[ЯМК|входного языка]] [[Электроника МК-161|«Электроники МК-161»]]. Что это означает? Давайте проверим это утверждение на примере классических программ для советских [[ПМК]]. Вот простые и широко известные программы для вычисления [https://ru.wikipedia.org/wiki/Гиперболические_функции гиперболических функций] из [[Справочник по расчётам на микрокалькуляторах, 3-е изд. (справочник)|3-го изд. справочника проф. Дьяконова]] (стр. 174): | |
|
| |
|
| [[Файл:DjakonovHyp.png]] | | [[Файл:DjakonovHyp.png]] |
|
| |
|
| == Наша первая программа на Каллисто ==
| | Возьмём программу 4.1 для вычисления гиперболического синуса sh, которая на языке МК выглядит так: |
| В качестве первого упражнения возьмём программу 4.1 для вычисления гиперболического синуса sh, которая на [[ЯМК|языке МК]] выглядит так:
| |
| Fe<sup>x</sup> ↑ F1/x − 2 ÷ С/П БП 00 | | Fe<sup>x</sup> ↑ F1/x − 2 ÷ С/П БП 00 |
|
| |
|
| Вот она же, написанная на [[Каллисто]]: | | Вот она же, написанная на Каллисто: |
| : sh e<sup>x</sup> ↑ 1/x − 2 ÷ . ; | | : sh e<sup>x</sup> ↑ 1/x − 2 ÷ . ; |
|
| |
|
| Каллистянская программа для вычисления (и вывода на [[индикатор]]) гиперболического синуса начинается с [[Слово :|двоеточия]] и заканчивается [[Слово ;|точкой с запятой]]. Предки этих двух коротких слов — команды калькулятора [[F ПРГ]] и [[F АВТ]]. Они переключают [[Каллисто]] из состояния интерпретации в состояние компиляции и обратно. В состоянии интерпретации слова исполняются сразу же (как в [[Режим автоматической работы|автоматическом режиме калькулятора]]), а в состоянии компиляции — запоминаются, чтобы исполниться позже (похоже на [[режим программирования]]).
| | Программа для вычисления гиперболического синуса начинается с двоеточия и заканчивается точкой с запятой. Это аналоги команд калькулятора F ПРГ и F АВТ |
|
| |
|
| Первое отличие в том, что после [[Слово :|двоеточия]] идёт слово sh. Это имя программы, а точнее нового слова для вычисления гиперболического синуса. [[Каллисто]] может хранить [[Словарь|в своём словаре]] не одну программу, как советские [[ПМК]], а многие сотни слов. Чтобы их различать, каждому слову положено уникальное имя. Слова можно сравнить с программой для советского [[ПМК]]. Чаще всего они даже превосходят по своим возможностям такие программы.
| | После двоеточия идёт слово sh — это имя программы, а точнее нового слова для вычисления (и вывода на экран) гиперболического синуса. Каллисто может хранить не одну программу, а множество слов. Поэтому каждому из них положено уникальное имя. Каждое слово можно сравнить с программой для советского ПМК, чаще всего они даже превосходят по своим возможностям такие программы. |
|
| |
|
| Также можно заметить, что каллистянские имена функций (они тоже являются словами) похожи на ПМКшные, но не требуют начальной буквы F. [[F EXP|Fe<sup>x</sup>]] и [[F1/x]] превратились в обычные [[Eˣ|e<sup>x</sup>]] и [[Слово 1/X|1/x]]. Некоторые справочники по ПМК уже использовали подобное соглашение. Перед [[Слово ;|точкой с запятой]] в определении нашего слова sh стоит [[Слово .|точка]]. Эта точка нужна для вывода результата на [[индикатор]], являясь своеобразным аналогом команды С/П. Такой вывод нужен в учебном примере. Настоящий библиотечный sh, разумеется, будет оставлять конечный результат в стеке. Ведь он может понадобиться в вычислениях «по цепочке». | | Также можно заметить, что каллистянские команды для вычисления функций (они тоже являются словами) не требуют начальной буквы F. Fe<sup>x</sup> и F1/x превратились в обычные e<sup>x</sup> и 1/x. Некоторые справочники по ПМК уже использовали подобное соглашение. Перед точкой с запятой в определении нашего слова sh стоит точка. Эта точка нужна для вывода результата на [[индикатор]], являясь своеобразным аналогом команды С/П. Такой вывод нужен в учебном примере. Настоящий библиотечный sh, разумеется, будет оставлять конечный результат в стеке. Ведь он может понадобиться в цепочечных вычислениях. |
|
| |
|
| Давайте проверим, правильно ли вычисляет наше новое слово sh гиперболический синус: | | Давайте проверим, правильно ли вычисляет наше новое слово sh гиперболический синус: |
| 1 sh | | 1 sh |
| [[Файл:sh.png|||264px|]]
| |
| Как видим, результат совпадает с тем, что приводит в справочнике профессор Дьяконов.
| |
|
| |
|
| Если вы пишите на [[Каллисто]] библиотеку гиперболических функций, окончательное определение гиперболического синуса sh будет выглядеть в ней так: | | Если вы создаёте библиотеку гиперболических функций (слов) на Каллисто, конечный результат будет выглядеть вот так: |
| : sh ( x -- sh x) e<sup>x</sup> ↑ 1/x − 2 ÷ ; | | : sh ( x -- sh x) e<sup>x</sup> ↑ 1/x − 2 ÷ ; |
|
| |
|
| Мы видим, что [[Слово .|точка]] исчезла. При необходимости разработчик сам поставит [[Слово .|точку]] для вывода конечного результата на [[индикатор]]. Также мы добавили комментарий, он [[(|в круглых скобках]]. По соглашению, принятому в Форте, такой комментарий содержит описания [[Стек данных|стека]] до и после работы слова. Между этими двумя описаниями стоят два [[Символ -|дефиса]]. | | Мы видим, что точка исчезла. При необходимости разработчик сам поставит точку для вывода конечного результата на [[индикатор]]. Также мы добавили комментарий, он в круглых скобках. По соглашению, принятому в Форте, такой комментарий содержит описания стека до и после работы слова. Между этими двумя описаниями стоят два [[Символ -|дефиса]]. |
| | |
| Согласитесь, переносить простые программы с [[ЯМК|языка МК]] на [[Каллисто]] легко. При этом их исходный текст выглядит лучше, а обращаться к ним удобней! Попробуйте самостоятельно перенести на [[Каллисто]] программу 4.2.
| |
|
| |
|
| == Программа, использующая переменную ==
| | Согласитесь, переносить простые программы с языка МК на Каллисто легко. При этом их исходный текст выглядит лучше, а обращаться к ним удобней! Попробуйте самостоятельно перенести на Каллисто программу 4.2. |
| Теперь упражнение посложней. Программа 4.3 использует [[X1|регистр предыдущего результата X1]]:
| |
|
| |
|
| Fe<sup>x</sup> ↑ ↑ F1/x + 2 ÷ − FВx ÷ С/П БП 00
| | Теперь упражнение посложней. Программа 4.3 использует [[X1|регистр промежуточного результата X1]]. Поскольку в Каллисто нет такого регистра, одно из решений — объявить промежуточную переменную, куда и запишем промежуточный результат. Назовём её x1 : |
| | | 0 VALUE x1 |
| Поскольку в [[Каллисто]] нет такого регистра, простейшее решение — [[VALUE|объявить переменную]], куда и запишем промежуточный результат. Назовём её x1 (число в переменную x1 копирует фраза ↑ to x1 ):
| |
| 0 value x1 | |
| : th ( x -- sh x/ch x) e<sup>x</sup> ↑ ↑ 1/x + 2 ÷ ↑ to x1 − x1 ÷ ; | | : th ( x -- sh x/ch x) e<sup>x</sup> ↑ ↑ 1/x + 2 ÷ ↑ to x1 − x1 ÷ ; |
|
| |
| Проверим результат на примере из справочника:
| |
| 1 th . | | 1 th . |
| [[Файл:th.png|||264px|]]
| |
| Результат совпадает с точностью до последнего знака.
| |
|
| |
| Конечно же, программы-«спагетти» переводить на [[Каллисто]] сложнее и потребует чуть больше подготовительных действий. [[Каллисто]] настаивает на структурном программировании. Зато об адресах и метках можно забыть, используя условный оператор и циклы, один из которых совместим с ПМКшным [[FL0]].
| |
|
| |
| == Цикл со счётчиком ==
| |
| Переведём на [[Каллисто]] классическую программу вычисления факториала (стр. 148):
| |
|
| |
| [[Файл:DjakonovFact.png]]
| |
|
| |
| На [[ЯМК|языке МК]] она выглядит так:
| |
| ВП П0 1 ИП0 × FL0 03 С/П
| |
|
| |
| Вот она же на [[Каллисто]] (кратчайшее имя ! использовать нехорошо, так как [[Слово !|восклицательный знак уже является важным словом]] [[Каллисто]]):
| |
| : n! ( n -- n!) 1 ↔ for i × next ;
| |
|
| |
| Роль [[R0|регистра 0]] выполняет переменная цикла, обращение к которой производит [[слово I]]. Проверим n! на примере из справочника:
| |
| 10 n! .
| |
| [[Файл:fact.png|||264px|]]
| |
| Если всё введено верно, результат опять совпадает со справочным.
| |
|
| |
| Замер времени выполнения показывает, что 10! вычисляется на [[Каллисто]] за 1,98 с. Это в пять раз быстрее советских [[ПМК]] — хотя, разумеется, значительно медленней, чем вычислять 10! непосредственно на [[Язык МК|языке МК-161]].
| |
|
| |
| Как в программе для ПМК, в каллистянском факториале есть своя изюминка. Если в ПМКшном факториале ноль превращается в единицу [[ВП|командой ВП]], то в каллистянском варианте ноль на входе приведёт к тому, что цикл [[FOR]]…[[NEXT]] не выполнится ни разу. В результате в [[Стек данных|стеке]] остаётся та единица, которая обычно выполняет роль первого сомножителя.
| |
|
| |
|
| == Ссылки ==
| | {{нет иллюстраций}} |
| * [http://tinyurl.com/Callisto161-2 tinyurl.com/Callisto161-2] — короткий адрес этой страницы (через зарубежный сайт)
| | {{заготовка}} |
|
| |
|
| [[Категория:Каллисто]] | | [[Категория:Каллисто]] |