CGOL [1] [2] (произносится как «см. Goll» ) - это альтернативный синтаксис с расширяемой алгебраической нотацией для языка программирования Lisp . Он был разработан для Maclisp по Vaughan Pratt , а затем портирована на Common Lisp . [3]
Парадигма | процедурный , императивный , структурированный |
---|---|
Разработано | Воан Пратт |
Впервые появился | 1973 |
Под влиянием | |
АЛГОЛ , ФОРТРАН , MLisp |
Нотация CGOL - это традиционная инфиксная нотация в стиле ALGOL , а не традиционный синтаксис префиксной нотации Lisp в круглых скобках . CGOL анализатор основан на дизайне Пратты для топ-вниз оператора старшинства разбора , [4] [5] иногда неофициально называют « Pratt анализатором ».
Семантически CGOL - это, по сути, просто Common Lisp с некоторыми дополнительными средствами чтения и поддержки принтеров.
CGOL можно рассматривать как более успешное воплощение некоторых основных идей, лежащих в основе более раннего проекта LISP 2 . Lisp 2 был преемником LISP 1.5, который был нацелен на обеспечение синтаксиса ALGOL. От LISP 2 отказались, тогда как сегодня можно использовать кодовую базу CGOL. Это связано с тем, что в отличие от LISP 2, CGOL реализован в виде переносимых функций и макросов, написанных на Lisp, не требующих изменений в реализации Lisp на хосте.
Синтаксис
Для многих часто используемых операций Common Lisp доступны специальные обозначения. Например, можно написать процедуру умножения матриц как:
для я от 1 до n делать для k от 1 до n делать (ac: = 0; для j от 1 до n делать ac: = ac + a (i, j) * b (j, k); c (i, k): = ac)
CGOL имеет инфиксную .
операцию (относящуюся к функции Common Lisp cons
) и инфиксную @
операцию (относящуюся к функции Common Lisp append
):
а. (b @ c) = (ab) @c
Предыдущий пример соответствует этому тексту в родном Common Lisp:
( РАВНО ( МИНУСЫ A ( ПРИЛОЖЕНИЕ B C )) ( ПРИЛОЖЕНИЕ ( МИНУСЫ A B ) C ))
CGOL использует of
для чтения и установки свойств:
'отец' x: = 'брат' родственника y
Предыдущий пример соответствует этому тексту в родном Common Lisp:
( PUTPROP X ( GET ( GET Y RELATIVE ) 'БРАТ ) ' ОТЕЦ )
Это иллюстрирует, как CGOL записывает функцию двух аргументов:
\ х, у; 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 г.
- ^ a b CGOL: Алголообразный язык, который компилируется в Common Lisp.
- ^ Пратт, Воан Р. Приоритет оператора сверху вниз. Материалы симпозиума ACM по принципам языков программирования . 1973. С. 41–51.
- ^ Ван Де Вантер, Майкл Л. Формализация и доказательство правильности языковой системы CGOL (магистерская диссертация). Технический отчет лаборатории компьютерных наук Массачусетского технологического института MIT-LCS-TR-147 (Кембридж, Массачусетс). 1975 г.
- ^ CGOL на ABCL Разработка блога реализации Armed Bear Common Lisp .