Парадигмы | многопарадигмальный : функциональный образовательный , процессуальный , рефлексивный |
---|---|
Семья | Лисп |
Разработано | Брайан Харви |
Разработчики | Дэн ван Блерком, Майкл Кац, Дуг Орлеанс. Значительный вклад: Фримен Дойч, Ханг Дао, Фред Гилхэм, Йехуда Кац, Джордж Миллс, Сэнфорд Оуингс, Рэнди Сарджент [1] |
Впервые появился | 1992 ( 1992 ) |
Стабильный релиз | 6.2.1 / 31 декабря 2020 г. ( 2020-12-31 ) |
Дисциплина набора текста | динамический |
Объем | Динамичный |
Язык реализации | С |
Платформа | IA-32 , x86-64 |
ОС | Windows , MacOS , Linux |
Лицензия | GPL |
Веб-сайт | люди.eecs.berkeley.edu/~bh/logo.html |
Под влиянием | |
Лисп | |
Под влиянием | |
Smalltalk , Etoys , Scratch , NetLogo , KTurtle, Rebol |
UBCLogo , также называемый Berkeley Logo , — это язык программирования , диалект Logo , который произошел от Lisp . Это диалект Logo, призванный стать «минимальным стандартом Logo». [2]
Он обладает наилучшими возможностями для обработки списков , файлов , ввода/вывода (I/O) и рекурсии . [3]
Его можно использовать для обучения большинству концепций компьютерной науки, как это сделал преподаватель Калифорнийского университета в Беркли Брайан Харви [4] в своей трилогии Computer Science Logo Style . [5] [6] [7] Это бесплатное программное обеспечение с открытым исходным кодом , выпущенное по лицензии GNU General Public License (GPL). [8]
Логотип был разработан в духе низкого порога и отсутствия потолка, что обеспечивает легкий вход новичкам и в то же время отвечает потребностям высококвалифицированных пользователей. UCBLogo имеет элементарный графический пользовательский интерфейс (GUI), поэтому существует несколько проектов, которые предлагают лучший интерфейс. MSWLogo и его преемник FMSLogo для Microsoft Windows обычно используются в школах Великобритании и Австралии . [ необходима цитата ] Для ввода/вывода (I/O) текст может быть записан в командное окно (выходной поток) с помощью print и в графическое окно с помощью label .
Анимации требуют как возможности рисовать, так и стирать фигуры. Процесс тот же самый, за исключением того, что в первом случае линия наносится на устройство отображения, а во втором случае линия удаляется. Используя аналогию с черепахой, ручка черепахи должна рисовать, а ручка черепахи должна стирать. Черепаху можно настроить на стирание всего, что находится под ней, с помощью команды PENERASE ( PE ), в то время как ручку можно настроить на начало рисования снова с помощью команды PENPAINT ( PPT ) в UCBLogo.
Часто используется аналогия черепахи с пером, прикрепленным к ее хвосту. Перо черепахи можно поднимать и опускать, рисуя таким образом элементарную пунктирную линию.
Пример кода:
FD 20 ; нарисовать линию и переместить PENUP ; поднять ручку так, чтобы она ничего не рисовала FD 20 ; переместить и не рисовать PENDOWN ; опустить ручку так, чтобы она снова рисовала FD 20 ; нарисовать линию и переместить PENUP ; поднять ручку так, чтобы она ничего не рисовала FD 40 ; переместить и не рисовать PENDOWN ; опустить ручку так, чтобы она снова рисовала RT 20 ; повернуть направо (по часовой стрелке) на 20 градусов
В UCBLogo есть три типа данных: слово, список и массив (число — частный случай слова). Интерпретатор определяет тип данных по контексту; статическая типизация отсутствует.
Префикс переменной в виде двоеточия ( : ) означает содержимое , передающее переменную по ссылке. Символ двойной кавычки ( " ) означает, что слово оценивается само по себе : оно не парное как открывающая и закрывающая кавычки, как это происходит во многих других языках. Число является особым случаем самооценивания и может использоваться с предшествующей кавычкой или без нее.
Назначение переменных выполняется с помощью команды make :
сделать "x сумма :y 3
make принимает 2 параметра, второй из которых здесь — sum :y "3
. sum принимает два «параметра» и является «операцией», поэтому вычисление возможно.
Переменные не обязательно должны быть объявлены перед использованием; тогда их область действия становится глобальной. Переменная может быть объявлена локальной , тогда ее область действия ограничивается этой процедурой и любыми процедурами, которые она вызывает, что называется динамической областью действия . Вызов процедуры с входными данными (название, обычно используемое для аргументов в литературе по Logo) также создает локальные переменные, которые содержат значения аргументов.
Logo наследует списки от Lisp , и они являются его основным методом хранения векторов. Список имеет преимущество перед массивом в том, что он бесконечно расширяем. Список можно рассматривать как очередь с операторами queue и dequeue или стек с операциями push и pop. Список свойств — это особый список, в котором нечетные элементы являются именами свойств, а четные — значениями свойств.
Logo предоставляет несколько общих структур управления . Существует одна условная структура , ifelse test [ do_if_true list ] [do_if_false list]
. Существует три команды итерации ( while , until и repeat ). Рекурсия , а не итерация, является предпочтительной парадигмой обработки Logo.
Logo также предоставляет структуры управления на основе списков. Основная идея состоит в двух списках:
ОПЕРАЦИЯ [ список команд ] [ множество элементов данных ]
Каждая из команд применяется по очереди к каждому элементу данных. Существует несколько таких команд шаблонов с именами MAP, APPLY, FILTER, FOREACH, REDUCE и CASCADE . Они представляют четыре разновидности итерации шаблона, известные как explicit-slot, named-procedure, named-slot (или Lambda) и procedure-text.
Команды могут быть записаны в одну или несколько строк. Многие команды имеют мнемонические краткие формы; например, FORWARD и RIGHT кодируются как FD и RT соответственно. Это делает ввод менее обременительным. Все, что написано после ; (точка с запятой), игнорируется, что позволяет кодеру вставлять комментарии.
; рисует квадрат со стороной 100 единиц ВПЕРЕД 100 ВЛЕВО 90 ВПЕРЕД 100 ВЛЕВО 90 ВПЕРЕД 100 ВЛЕВО 90 ВПЕРЕД 100 ВЛЕВО 90
FD 100 RT 120 FD 100 RT 120 ; рисует треугольник FD 100 RT 120
Программа Hello World в Logo выглядит так:
распечатать [Привет, мир]
Математика в Logo использует префиксную или польскую нотацию , например: сумма :x :y, произведение :x :y, разность :x :y, частное :x :y . Инфикс также доступен.
Каждая строка состоит из вызовов функций, которые бывают двух типов: команды (которые обычно что-то делают — производят эффекты, — но не возвращают значение), такие как print , и операции (которые просто возвращают значение, его вывод), такие как sum , first или readlist .
Команда похожа на процедуру Pascal , а операция похожа на функцию Pascal.. Особое подмножество операций, называемых предикатами , которые просто выводят слово true или false , традиционно записываются с конечным p . Примерами являются emptyp , wordp и listp . Выражения могут быть примитивами или могут быть определены пользователем. Выражения могут принимать ноль, один или несколько параметров.
Процедуры можно определить в командной строке, используя пару TO ... END :
ПРЕДСЕДАТЕЛЮПОВТОР 4 [FD 100 RT 90] FD 200КОНЕЦ
Логотип может передавать дополнительную информацию своим словам и возвращать информацию. Процедура (слово) должна ожидать что-то и давать этому чему-то имя. Для этой цели используется двоеточие.
{{cite book}}
: |website=
проигнорировано ( помощь ){{cite book}}
: |website=
проигнорировано ( помощь ){{cite book}}
: |website=
проигнорировано ( помощь ){{cite book}}
: |website=
проигнорировано ( помощь )