CGOL - CGOL

CGOL
Парадигмапроцедурный, императив, структурированный
РазработаноВоан Пратт
Впервые появился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]

Рекомендации

  1. ^ Пратт, Воан Р. CGOL: альтернативное внешнее представление для пользователей LISP. Рабочий документ AI 121. Лаборатория искусственного интеллекта Массачусетского технологического института (Кембридж, Массачусетс). 1976 г.
  2. ^ Пратт, Воан Р. CGOL - алгебраическая нотация для пользователей MACLISP. 27 января 1977 г.
  3. ^ а б CGOL: Алголообразный язык, который компилируется в Common Lisp.
  4. ^ Пратт, Воан Р. Приоритет операторов сверху вниз. Материалы симпозиума ACM по принципам языков программирования. 1973. С. 41–51.
  5. ^ Ван Де Вантер, Майкл Л. Формализация и подтверждение правильности языковой системы CGOL (Дипломная работа). Технический отчет лаборатории компьютерных наук Массачусетского технологического института MIT-LCS-TR-147 (Кембридж, Массачусетс). 1975 г.
  6. ^ CGOL на ABCL Разработка реализации Common Lisp Armed Bear блог.