Почему для работ в области искусственного интеллекта часто выбирают какой-нибуд
из диалектов Лиспа или Пролог, что в них такого, чего нельзя сделать на C#? Интересую
именно сравнение возможностей (что можно сделать в одном языке программирования, но невозможно или проблематично в другом) языка, а не готовых алгоритмов/методов или их количества.
upd: Нашел проект IronScheme, зеркало Github
IronScheme implements over 99% of the R6RS specification and specified behavior.
пример работы из C#, документация
Ответы
Ответ 1
Вполне законно вопрос поставить шире: сравнение возможностей процедурного, функциональног
и логического программирования. Вопрос очень широкий и требует как минимум хорошей академической статьи.
В принципе, возможности большинства языков всех этих групп достаточно близки. Вопро
только в простоте и легкости реализации тех или иных задач. Думаю, все, что можно сделат
на Лиспе или Прологе, вполне возможно реализовать и на C#. Только там, где на этих языках та или иная операция будет занимать пару строчек, на процедурном языке может занять пару десятков.
Ответ 2
Scheme - изящный и простой язык, к тому-же близость синтаксиса к соответствующем
AST Tree позволяет программисту интуитивно генерировать необходимые языки с помощь
макросов. Вообще, для Scheme естественно, что код - это данные. Это полезно для разработчиков всевозможного матана, в тч специфичного для AI (обработка и генерация графов - сильное место любого Lisp), но также и интернет-магазинов....
Есть в Scheme принципиально отсутствующие в C# сущности, например: продолжения (Continuations)
как объекты первого класса. Это фактически значит, что состояние всей программы можно сохранять и восстанавливать на уровне языка.
Scheme - мультипарадигменный язык, его философия не навязывает ООП, равно как чисто-функционально
или реактивное программирование. Экосистема Scheme поддерживает развитые средства для любых, в т.ч. и эксперементальных методик.
Хотя не существует единого репозитария Scheme-кода и стандарта модульности, зат
развита теория и добрая традиция переиспользования функций, построенных (возможно) в разных стилях. Есть и база качественного кода на Scheme. Скажем, их даже несколько.
REPL - традиционный для LISP способ коммуникации с интерпретатором, "выращивания
окружений. Изменения вносятся в непрерывно работающую программу - подобным образом математик
работают с Maxima и её аналогами. Для некоторых современных языков, того-же С#, совершенно необходимо специальное IDE. Однако есть и мнение, что IDE в целом усложняет процесс разработки, во всяком случае - итеративный процесс разработки очевидно помогает разгрузить оперативную память программиста.
Существуют компиляторы и интерпретаторы Scheme для любой архитектуры - ARM, Webkit/ECMAScript
.NET, Java... Благодаря простоте, Scheme - в мире, один из самых портированых языков. С недавних пор, он выбран стандартным языком расширения GNU, и на этой платформе построен дистрибутив GUIX с демоном инициализации Shepherd (замена init и systemd).
Ответ 3
Есть множество языков программирования. Вот для алгоритмов или ИИ нужна спец. подготовка
А специалистов таких не много. Теперь выберите из этого числа людей тех, кто на профессионально
уровне знает тот же С#. Вот и получается что тем, кто занимается ИИ, проще написать (())О() в пару строк - и все готово. Тут тебе и строгой типизации нет, и ООП учить (почти) не надо. А вообще была бы возможность, выучил бы F#. У меня даже книга есть по нем. Но язык мне действительно показался сложноватым.
Ответ 4
Наверное, то, что сама идеология Лисп, в отличие от идеологии С#, более подходи
для написания самомодифицирующегося кода - кода, анализирующего и модифицирующего самого себя.
То есть Лисп свой собственный исходник может обрабатывать как данные.
Комментариев нет:
Отправить комментарий