Распространенная ошибка - считать Лисп функциональным языком. На самом деле это лучше всего рассматривать как семейство языков, возможно, но в наши дни, когда люди говорят на Лиспе, они обычно имеют в виду Common Lisp.
Common Lisp допускает функциональное программирование, но сам по себе он не является функциональным языком. Скорее это язык общего назначения. Схема - гораздо меньший вариант, более функциональный по ориентации, и, конечно, есть и другие.
Что касается вашего вопроса, это хороший выбор? Это действительно зависит от ваших планов. У Common Lisp, в частности, есть некоторые сильные стороны для такого рода вещей. Он интерактивен и интроспективен на уровне, который вы обычно видите на так называемых языках сценариев, что делает его очень быстрым в разработке. В то же время он скомпилирован и имеет эффективные компиляторы, поэтому вы можете ожидать производительности в том же приблизительном сценарии, что и другие эффективные компиляторы (с коэффициентом два из c является типичным моментом). Несмотря на большой язык, он имеет гораздо более согласованный дизайн, чем такие вещи, как c ++, а возможности метапрограммирования могут сделать очень чистый и легкий для понимания код для вашего конкретного приложения. Если вы только посмотрите на эти аспекты
обычный шепот выглядит потрясающе.
Однако есть и недостатки. Сообщество маленькое, вы не найдете много людей, чтобы помочь, если это то, что вы ищете. Несмотря на то, что встроенная библиотека велика, вы не найдете столько сторонних библиотек, так что вы можете написать больше с нуля. Наконец, хотя это отнюдь не сад в стенах, CL не имеет такой плавной интеграции с иностранными библиотеками, как, например, в Python. Это не значит, что вы не можете вызывать код c, для этого есть хорошие инструменты.
Между прочим, CLOS - это самая мощная ОО-система, о которой я могу подумать, но это совсем другой подход, если вы работаете с мейнстримом c ++ / java / c # / etc. ОО фон (да, они различаются, но за пределами одного и нескольких дюймов. Не так уж много) на первый взгляд это может показаться немного странным, почти вывернутым наизнанку.
Если вы пойдете этим путем, вам придется следить за некоторыми проблемами с производительностью реального конвейера рендеринга, если вы пишете это сами с помощью CLOS. Система классов обладает невероятной гибкостью во время выполнения (т. Е. Обновление определений классов во время выполнения не путем внесения исправлений обезьянами и т. Д., А путем фактического изменения класса и обновления экземпляров), однако вы платите за это некоторую стоимость отправки.
Для чего бы то ни было, в прошлом я использовал CL для исследовательского кода, требующего численной эффективности, то есть для моделирования другого рода. Это хорошо работает для меня. В этом случае я не беспокоился об использовании существующего кода - его не было, поэтому я все равно писал практически все с нуля.
Таким образом, это может быть хорошим выбором языка для этого проекта, но не единственным. Если вы не используете язык как с аспектами высокого уровня, так и с хорошей производительностью (как у CL, как у OCaml и некоторых других), я бы определенно рассмотрел возможность двухуровневого подхода с таким языком, как lua или, возможно, python (много библиотек) поверх некоторого кода на c или c ++, выполняющего тяжелую работу.