Ло́го (англ. Logo) — язык программирования высокого уровня, разработанный в 1967 году Уолли Фёрзегом, Сеймуром Пейпертом и Синтией Соломон[англ.] в образовательных целях для обучения детей дошкольного и младшего школьного возраста основным концепциям программирования (рекурсии, расширяемости и пр.).
Первое научное подтверждение успеха применения Лого как средства обучения было продемонстрировано Идит Харель, студенткой Пейперта, которая использовала Лого для обучения детей программированию и дробям в 1988 году[2].
Logo обеспечивает среду, в которой дети могут развивать свои навыки рассуждений и решений задач.
Типичной и ожидаемой частью языка и среды программирования Лого являются средства черепашьей графики, которые, с одной стороны, позволяют придать наглядность обучению программированию, а с другой — очень органично сочетаются с широким использованием рекурсии.
Интерпретаторы Лого существуют для различных платформ и операционных систем: Windows, DOS, Linux, Mac OS, Unix и др. Существует также множество объектно-ориентированных диалектов Лого, таких как Object Logo, вышедший в 1986 году. В 1997 году вышла российская версия — ЛогоМиры.
Брайн Харви, автор трехтомника о стиле программирования на Лого («Computer Science Logo Style») создал Berkeley Logo. Мультиагентные версии Лого — StarLogo и NetLogo.
Типичные реализации Лого (от LCSI, например) предоставляют программисту библиотеку встроенных команд, текстовую консоль интерпретатора и «лист программ», на котором можно разместить инструкции регистрации новых функций. Также обеспечивается как минимум один графический экран, как минимум с одной «черепашкой».
Во многих реализациях поддерживается многопоточность — на уровне выполнения команд черепашками и на уровне возможности запустить команду асинхронно и в дальнейшем проверять, завершилась ли она. Есть возможность передать на выполнение интерпретатору программно сформированный список слов.
Лого более прогрессивен, чем процедурные языки программирования Бейсик и Фортран, которые обычно используются для обучения программированию. Однако, реализации Лого, как правило, не имеют достаточно хорошо разработанных программ для работы с файлами, и это мешает ему получить широкое распространение в качестве языка программирования.
По сути, язык Лого является адаптацией языка Лисп (некоторые даже называют его «Лиспом без скобок»).
В языке Лого программа представляет собой список «слов».
Как правило, реализации Лого слабо ограничивают перечень допустимых в слове символов, поэтому команды можно называть и по-русски. Более того, многие русскоязычные реализации Лого имеют русскоязычные команды или встроенные русскоязычные синонимы для всех встроенных команд.
Слова в списке разделяются пробелами.
Слово может быть либо командой, либо литералом одного из трёх видов — строковым, числовым или литералом списка. Команда может возвращать значение, тогда она считается функцией. Литералы возвращают своё значение непосредственно. Строковой литерал — оформляется как слово, перед которым ставят двойную кавычку. Слова, состоящие из цифр, интерпретируются как числовые литералы. Для формирования списка из слов в тексте программы их окружают квадратными скобками.
Также есть команды сохранения и получения значения по имени, но многие реализации дополняют его понятием переменной — вводя компактный синтаксис команды для получения значения переменной. Поэтому обычно для получения значения переменной достаточно написать её имя, предварив его двоеточием.
Имеется специальный синтаксис для передачи в некоторые встроенные команды заранее не фиксированного количества параметров. Для этого предлагается заключать команду и все её параметры в круглые скобки, например: (СПИСОК :A :Б :В :Г 1 2 3 4) Для пользовательских команд такой синтаксис не применим, потому что не предусмотрено синтаксиса для описания обработки переданных таким образом параметров.
(СПИСОК :A :Б :В :Г 1 2 3 4)
Переданный на выполнение интерпретатору список команд выполняется по очереди. Очередное слово интерпретируется как команда из текущего словаря системы. Если она принимает параметры, то интерпретатор выполняет следующее слово из списка, с целью получить значение для передачи его в качестве первого параметра.
Если команда стоит на месте параметра, ожидается что эта команда вернёт значение. А если возвращаемое очередной командой значение не предусмотрено передавать другой команде, система сообщает об ошибке, если такой вызов встретился в тексте программы, либо отображает значение, если вызов команды произведён в интерактивном режиме.
Поддерживается использование привычной инфиксной формы выражений математики и логики на привычных операторах, типа «(2 + 3) * 5» и «2 > 5». Но в связи с тем, что по основным правилам языка сначала идёт команда, а потом её параметры, для базовых арифметических и логических операций в некоторых диалектах (LCSI ЛогоМиры и LogoWriter, например) также существуют команды, с использованием которых выражения принимают вид «умножь сложи 2 3 5» и «больше? 2 5».
Есть команда для расширения словаря пользовательскими командами, она принимает имя новой команды, список параметров и список команд.
Предусмотрены два основных механизма управления ходом выполнения программы: оператор цикла с фиксированным числом повторений и рекурсия.
TO HELLO PRINT [Hello, World!] END
В русской версии языка Лого:
ДЛЯ ПРИВЕТСТВИЯ ПИШИ [Привет, мир!] КОНЕЦ
По состоянию на июнь 2010 года насчитывалось не менее 246 реализаций Лого[3] с момента создания языка.
В настоящее время не имеется единого стандарта языка Лого, хотя широко приняты определённые соглашения о базовых аспектах языка. Диалекты Лого имеют значительные отличия. Ситуация усложняется наличием ряда программ черепашьей графики, которые ошибочно называются «Лого».
Наиболее широко использовавшейся и доминировавшей в своё время реализацией языка была система Apple Logo, разработанная фирмой LCSI для компьютера Apple II и распространённая в 1980-е годы. В Болгарии была произведена локализация этого продукта на болгарский и русский языки для совместимых с Apple II компьютеров серии Правец 8, распространявшаяся под названием «Лого 2.0» и широко использовавшаяся в учебном процессе в Болгарии и СССР. В дальнейшем в России была выпущена русская локализация продукта LCSI для MS-DOS под названием LogoWriter.
На сегодняшний день распространена свободная кроссплатформенная реализация UCBLogo[4], также известная как Berkeley Logo, недостатком которой, однако, является рудиментарный графический интерфейс пользователя.
Для Microsoft Windows доступна система MSWLogo[5] и её более новая версия FMSLogo[6][7], которые широко используются в школах Великобритании и Австралии. Также в западных школах используются коммерческие реализации MicroWorlds Logo[8] и Imagine Logo[9].
MSWLogo и FMSLogo поддерживают использование нескольких черепах и трёхмерную графику, а также расширенные возможности ввода-вывода и другие расширения.
Для MacOS X доступна бесплатная реализация ACSLogo[10], имеющая достаточно развитый графический интерфейс, локализацию на нескольких языках и позволяющая добавлять собственные локализации.
В России в учебном процессе используются русские локализации LCSI MicroWorlds для Windows и Mac OS X под названием «ЛогоМиры» и «ПервоЛого»[11].