КОЛЛ
Парадигма | процедурный , императивный , структурированный |
---|---|
Разработано | Воган Пратт |
Впервые появился | 1973 |
Под влиянием | |
АЛГОЛ , ФОРТРАН , MLisp |
КОЛЛ [1] [2] (произносится как «see goll» ) — альтернативный синтаксис с расширяемой алгебраической нотацией для языка программирования Lisp . Он был разработан для MACLISP Воаном Праттом и впоследствии портирован на Common Lisp . [3]
Нотация CGOL — это традиционная инфиксная нотация в стиле ALGOL Лиспа с одинаковыми круглыми скобками , а не традиционный синтаксис префиксной нотации . Синтаксический анализатор CGOL основан на конструкции Пратта для сверху вниз приоритета операторов анализа . [4] [5] иногда неофициально называемый « парсером Пратта ».
Семантически CGOL — это, по сути, просто Common Lisp с некоторой дополнительной поддержкой чтения и печати.
CGOL можно рассматривать как более успешное воплощение некоторых основных идей, лежащих в основе более раннего проекта LISP 2 . Lisp 2 был преемником LISP 1.5 , целью которого было предоставление синтаксиса ALGOL. От LISP 2 отказались, тогда как сегодня можно использовать кодовую базу CGOL. Это связано с тем, что в отличие от LISP 2, CGOL реализован в виде переносимых функций и макросов, написанных на Lisp, и не требует никаких изменений в реализации Lisp хоста.
Синтаксис
[ редактировать ]Для многих часто используемых операций Common Lisp доступны специальные обозначения. Например, можно написать процедуру умножения матриц следующим образом:
for i in 1 to n do
for k in 1 to n do
(ac := 0;
for j in 1 to n do
ac := ac + a(i,j)*b(j,k);
c(i,k) := ac)
CGOL имеет инфикс .
операция (ссылаясь на Common Lisp's cons
функция) и инфикс @
операция (ссылаясь на Common Lisp's append
функция):
a.(b@c) = (a.b)@c
Предыдущий пример соответствует этому тексту в собственном Common Lisp:
(EQUAL (CONS A (APPEND B C)) (APPEND (CONS A B) C))
CGOL использует of
для чтения и установки свойств:
'father' of x := 'brother' of relative of y
Предыдущий пример соответствует этому тексту в собственном Common Lisp:
(PUTPROP X (GET (GET Y RELATIVE) 'BROTHER) 'FATHER)
Это иллюстрирует, как CGOL записывает функцию двух аргументов:
\x,y; 1/sqrt(x**2 + y**2)
Предыдущий пример соответствует этому тексту в собственном Common Lisp:
(LAMBDA (X Y) (QUOTIENT 1 (SQRT (PLUS (EXPT X 2) (EXPT Y 2)))))
Синтаксис CGOL управляется данными, поэтому его можно изменять и расширять.
Статус и исходный код
[ редактировать ]Известно, что CGOL работает над Armed Bear 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 Разработка блога о реализации Armed Bear Common Lisp .