InteLib (InteLib)

Перейти к навигации Перейти к поиску
InteLib
Скриншот программы InteLib
Тип Библиотека для мультипарадигмального программирования
Разработчик Андрей Викт. Столяров
Написана на C++
Операционные системы Unix-подобные, Microsoft Windows
Последняя версия
Лицензия GNU LGPL
Сайт intelib.org

InteLib — библиотека классов C++, моделирующая вычислительную модель языка Лисп и предоставляющая набор операций, позволяющих описывать S-выражения Лиспа с помощью синтаксически близких арифметических выражений в рамках C++. Библиотека создана в качестве инструмента мультипарадигмального программирования.

Библиотека предоставляет объектно-ориентированную модель гетерогенных S-выражений, снабжённую операцией вычисления S-выражения в терминах Лиспа. Классы, составляющие модель, снабжены переопределёнными инфиксными операциями, позволяющими записывать S-выражения в виде зрительно близких к ним арифметических выражений языка C++. Так, в нескольких статьях, посвящённых InteLib, приводится пример функции на Лиспе:

  (defun isomorphic (tree1 tree2)
     (cond ((atom tree1) (atom tree2))
           ((atom tree2) NIL)
           (t (and (isomorphic (car tree1) 
                               (car tree2))
                   (isomorphic (cdr tree1) 
                               (cdr tree2))
  ))))

Средствами InteLib этот фрагмент кода можно записать в виде следующего выражения C++:

  (L|DEFUN, ISOMORPHIC, (L|TREE1, TREE2),
    (L|COND, 
      (L|(L|ATOM, TREE1), (L|ATOM, TREE2)),
      (L|(L|ATOM, TREE2), NIL),
      (L|T, (L|AND,
        (L|ISOMORPHIC, (L|CAR, TREE1), 
                       (L|CAR, TREE2)),
        (L|ISOMORPHIC, (L|CDR, TREE1), 
                       (L|CDR, TREE2))
  ))))

Здесь L — это переменная типа LListConstructor, введённая ради операции L|, которая конструирует список из одного элемента. Результатом операции является объект класса LReference, для которого переопределена операция «запятая» — в библиотеке InteLib эта операция служит для добавления новых элементов к имеющемуся списку.

Результатом всего выражения также является объект класса LReference. Метод Evaluate(), описанный в этом классе, позволяет вычислить выражение в соответствии с правилами языка Лисп. Результатом такого вычисления будет новое S-выражение, представленное, как всегда, объектом класса LReference.

DEFUN, ISOMORPHIC, TREE1 и др. в вышеприведённом примере являются переменными класса LSymbol, который представляет понятие символа Лиспа.

Возможности

[править | править код]

Текущая версия InteLib включает набор средств для работы с S-выражениями как гетерогенными структурами данных (без вычисления), а также вычислительные модели языков Лисп и Scheme (точнее говоря, диалектов InteLib Lisp и InteLib Scheme, которые не соответствуют стандартам этих языков). В комплект поставки входят интерактивные интерпретаторы обоих диалектов, а также трансляторы, принимающие на вход модуль в традиционном синтаксисе Лиспа или Scheme и создающие модуль на C++, снабжённый заголовочным файлом.

Первая работающая версия библиотеки была написана А. Столяровым в ходе выполнения магистерской квалификационной работы на факультете ВМиК МГУ в 1999 году.

Библиотека InteLib впервые официально упоминается в статье А. Столярова и Е. Большаковой Building functional techniques into an object-oriented language[1], представленной на конференции JCKBSE'2000 в Брно в сентябре 2000 года.

В 2002 году состоялась защита кандидатской диссертации А. Столярова Интеграция разнородных языковых механизмов в рамках одного языка программирования, в которой представлен метод непосредственной интеграции, реализованный в библиотеке InteLib.

Как сказано на официальном сайте InteLib, название библиотеки происходит от слов Intelligence Library, что отражает исходное намерение автора интегрировать в проекты C++ вычислительные модели языков искусственного интеллекта.

Лицензирование

[править | править код]

Библиотека InteLib является свободным программным обеспечением. Сама библиотека распространяется по лицензии LGPL, сопутствующие трансляторы и интерпретаторы — по лицензии GPL.

Примечания

[править | править код]
  1. E. Bolshakova and A. Stolyarov. Building functional techniques into an object-oriented system. In Knowledge-Based Software Engineering. Proceedings of the 4th JCKBSE, volume~62 of Frontiers in Artificial Intelligence and Applications, pages 101--106, Brno, Czech Republic, September 2000. IOS Press, Amsterdam. ISBN 1-58603-060-4 ; http://www.croco.net/croco/papers/bolshakova_stolyarov_2000.ps Архивная копия от 4 марта 2016 на Wayback Machine