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

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.