Maclisp (или MACLISP , иногда называемый MacLisp или MacLISP ) — язык программирования , диалект языка Lisp . Он возник в рамках проекта MAC [1] Массачусетского технологического института (MIT) (от которого он получил свой префикс) в конце 1960-х годов и был основан на Lisp 1.5. [2] Ричард Гринблатт был основным разработчиком исходной кодовой базы для PDP-6 ; [1] Джон Л. Уайт отвечал за его дальнейшее обслуживание и развитие. Название Maclisp начало использоваться в начале 1970-х годов, чтобы отличить его от других ответвлений PDP-6 Lisp, особенно от BBN Lisp .
Maclisp является потомком Lisp 1.5 . [3] Maclisp отличается от Lisp 1.5 использованием ячейки значений для доступа и хранения динамических значений переменных ; [4] В Lisp 1.5 для определения значения переменной использовался линейный поиск по списку ассоциаций. [5] Оценка переменных Maclisp выполняется быстрее, но имеет другую семантику переменных. Maclisp также использовал макросы чтения, чтобы сделать ввод и вывод более читаемыми , называемыми вводом/выводом (I/O). Вместо ввода (QUOTE A)
можно было бы ввести 'A
то же самое s-выражение . Хотя обе реализации помещают функции в список свойств, Maclisp использует другой синтаксис для определения функций. [6] Maclisp также имеет функцию загрузки по требованию. [7]
Maclisp начинался с компьютеров Digital Equipment Corporation PDP-6 и PDP-10 , работающих под управлением несовместимой системы разделения времени (ITS); позже он был портирован на все остальные операционные системы PDP-10, например, Timesharing/Total Operating System , TOPS-10 и TOPS-20 . Исходная реализация была на языке ассемблера , но более поздняя реализация на Multics использовала PL/I . Maclisp значительно развился за время своего существования. Основные особенности [ какие? ] были добавлены, что в других языковых системах обычно соответствует основным номерам выпусков. [ сомнительно ]
Maclisp использовался для реализации системы компьютерной алгебры Macsyma (CAS) или программы символьной алгебры. Разработка Macsyma также привела к появлению нескольких функций [ каких? ] в Маклиспе. Программа создания мира блоков SHRDLU была написана на Maclisp, поэтому этот язык широко использовался в исследовательском сообществе искусственного интеллекта (ИИ) в начале 1980-х годов. Он также использовался для реализации других языков программирования, таких как Planner и Scheme . Multics Maclisp использовался для реализации первого Emacs на основе Lisp .
Maclisp был влиятельной реализацией Lisp, но больше не поддерживается активно. Теперь он работает на эмуляторах PDP-10 и может использоваться для экспериментов с ранними программами искусственного интеллекта.
Maclisp начинался с небольшого фиксированного количества типов данных : cons- ячейка, атом (позже названный символом ), целое число и число с плавающей запятой . Более поздние дополнения включали: массивы , которые никогда не были первоклассными типами данных; целые числа произвольной точности (бигнумы); струны ; и кортежи . Все объекты (кроме inums) были реализованы как указатели , а их тип данных определялся блоком памяти, на который они указывали, с особым случаем для небольших чисел (inums).
Программы можно интерпретировать или компилировать . Поведение компиляции было таким же, как и интерпретация, за исключением того, что локальные переменные были лексическими по умолчанию в скомпилированном коде, если не были объявлены SPECIAL, [8] и не выполнялась проверка ошибок для встроенных операций, таких как CAR и CDR. Компилятор Ncomplr (середина 1970-х годов) представил в языках Lisp быструю числовую поддержку, генерируя машинный код (инструкции) для арифметических действий, а не вызывая интерпретирующие процедуры, которые распределяются по типу данных. Это сделало арифметику Лиспа сравнимой по скорости с арифметикой Фортрана для скалярных операций (хотя реализация массивов и циклов Фортрана оставалась намного быстрее).
Первоначальная версия была ограничена 18-битным адресом памяти PDP-10, и значительные усилия были затрачены на то, чтобы реализация была компактной и простой. Multics Maclisp имел гораздо большее адресное пространство, но его использование было дорогостоящим. Когда память и вычислительная мощность PDP-10 были превышены, была изобретена машина Lisp : Lisp Machine Lisp является прямым потомком Maclisp. Также использовалось несколько других диалектов Лиспа , и необходимость объединения сообщества привела к созданию современного языка Common Lisp .
Maclisp был назван в честь Project MAC и не имеет отношения к компьютеру Apple Macintosh (Mac), которому он предшествовал десятилетиями, или к Джону Маккарти . Различные системы Lisp для Macintosh не имеют особого сходства с Maclisp. [9]
Языком более высокого уровня, используемым в большей части программ лаборатории машинного зрения, является система PDP-6 LISP.
Эта система основана главным образом на языке программирования LISP 1.5, но была значительно модифицирована во многих отношениях.
Они включают в себя множество новых функций и услуг, в том числе средства для связи с программами, написанными на других языках.
e
в окружающей среде a
выполняется с помощью (cdr (assoc e a))
. Это предполагает линейный поиск в списке ассоциаций a
. Более подробное описание с глобальными константами и ошибками приведено на стр. 71; перед поиском в списке ассоциаций он выполняет линейный поиск в списке свойств.defun
; Лисп 1.5 использует define
.autoload
.Если связываемая переменная объявлена специальной, привязка компилируется как код, имитирующий способ связывания переменных интерпретатором.
Проект MAC не имел ничего общего с Apple «Mac».
И MACLISP тоже.