CGOL - CGOL
Эта статья может требовать уборка встретиться с Википедией стандарты качества. Конкретная проблема: необходимо произношение "CGOL" в IPAАвгуст 2019 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Парадигма | процедурный, императив, структурированный |
---|---|
Разработано | Воан Пратт |
Впервые появился | 1973 |
Под влиянием | |
АЛГОЛ, FORTRAN, MLisp |
CGOL[1][2] (произносится "видеть голла") - альтернативный синтаксис с расширяемой алгебраической нотацией для Язык программирования Лисп. Он был разработан для МАКЛИСП к Воан Пратт и впоследствии перенесен на Common Lisp.[3]
Обозначение CGOL является традиционным инфиксная запись, в стиле АЛГОЛ, а не традиционный Lisp, заключенный в круглые скобки префиксная запись синтаксис. Синтаксический анализатор CGOL основан на дизайне Пратта для сверху вниз приоритет оператора разбор,[4][5] иногда неофициально называют "Парсер Пратта ".
Семантически CGOL - это, по сути, просто Common Lisp с некоторой дополнительной поддержкой чтения и печати.
CGOL можно рассматривать как более успешное воплощение некоторых основных идей, лежащих в основе более ранних LISP 2 проект. Lisp 2 был преемником LISP 1.5 который был нацелен на обеспечение синтаксиса АЛГОЛА. От LISP 2 отказались, тогда как сегодня можно использовать кодовую базу CGOL. Это связано с тем, что в отличие от LISP 2, CGOL реализован как переносимые функции и макросы, написанные на Lisp, не требующие изменений в реализации Lisp хоста.
Синтаксис
Для многих часто используемых операций Common Lisp доступны специальные обозначения. Например, можно написать процедуру умножения матриц как:
для i от 1 до n do для k от 1 до n do (ac: = 0; для j от 1 до n do ac: = ac + a (i, j) * b (j, k); c (i, k): = ac)
CGOL имеет инфикс .
операция (имеется в виду Common Lisp минусы
функция) и инфикс @
операция (имеется в виду Common Lisp добавить
функция):
а. (b @ c) = (a.b) @c
Предыдущий пример соответствует этому тексту в родном Common Lisp:
(РАВНЫЙ (МИНУСЫ А (ДОБАВИТЬ B C)) (ДОБАВИТЬ (МИНУСЫ А B) C))
CGOL использует из
читать и устанавливать свойства:
'отец' x: = 'брат' родственника y
Предыдущий пример соответствует этому тексту в родном Common Lisp:
(PUTPROP Икс (ПОЛУЧАТЬ (ПОЛУЧАТЬ Y ОТНОСИТЕЛЬНЫЙ) 'БРАТ) 'ОТЕЦ)
Это показывает, как CGOL отмечает функцию двух аргументов:
х, у; 1 / sqrt (x ** 2 + y ** 2)
Предыдущий пример соответствует этому тексту в родном Common Lisp:
(ЛЯМБДА (Икс Y) (QUOTIENT 1 (SQRT (PLUS (EXPT Икс 2) (EXPT Y 2)))))
Синтаксис CGOL управляется данными, поэтому его можно изменять и расширять.
Статус и исходный код
CGOL, как известно, работает над Вооруженный медведь Common Lisp.[6]
Исходный код CGOL и некоторые текстовые файлы, содержащие его обсуждения, доступны как бесплатное ПО по адресу Университет Карнеги Меллон Репозиторий искусственного интеллекта.[3]
Рекомендации
- ^ Пратт, Воан Р. CGOL: альтернативное внешнее представление для пользователей LISP. Рабочий документ AI 121. Лаборатория искусственного интеллекта Массачусетского технологического института (Кембридж, Массачусетс). 1976 г.
- ^ Пратт, Воан Р. CGOL - алгебраическая нотация для пользователей MACLISP. 27 января 1977 г.
- ^ а б CGOL: Алголообразный язык, который компилируется в Common Lisp.
- ^ Пратт, Воан Р. Приоритет операторов сверху вниз. Материалы симпозиума ACM по принципам языков программирования. 1973. С. 41–51.
- ^ Ван Де Вантер, Майкл Л. Формализация и подтверждение правильности языковой системы CGOL (Дипломная работа). Технический отчет лаборатории компьютерных наук Массачусетского технологического института MIT-LCS-TR-147 (Кембридж, Массачусетс). 1975 г.
- ^ CGOL на ABCL Разработка реализации Common Lisp Armed Bear блог.