Вызов LISP или SCHEME из .NET / C # - PullRequest
7 голосов
/ 29 июля 2010

В моем существующем программном обеспечении у меня есть реализация генетического программирования, использующая доморощенное дерево принятия решений, которое способно применять базовые логические операторы (ИЛИ НЕ) в некоторых логических данных, которые предоставляются ему в виде массива.Я использую платформу .NET / C # с серверной частью SQLServer.В поисках путей повышения производительности моей генетической программы я пришел к выводу, что мне нужны почти все дополнительные функциональные возможности, которые поставляются с функциональным языком, и я считаю, что Scheme или, в меньшей степени, LISP, являются лучшими решениями для него, если я не хочу реализовывать такие функции, какCOND, IF, операторы сравнения и т. Д. Я сам расширяю существующую реализацию.

Мой вопрос к форуму: есть ли эффективный способ вызова Scheme (или LISP) из приложения .NET, передающего данные вперед и назад в некоторыхформа массива.Если это невозможно, вы думаете, что будет лучше просто укусить пулю и реализовать ее с нуля, или я должен искать альтернативные способы, такие как, например, общение с помощью текстового файла?

Ответы [ 4 ]

5 голосов
/ 29 июля 2010

Существует реализация Схемы, совместимая с R6RS для DLR, которая называется IronScheme . Поскольку IronScheme использует DLR, его можно встроить в любое приложение .NET, используя стандартизированные API встраивания DLR, точно так же, как вы бы встроили, скажем, IronRuby или IronPython:

dynamic Scheme = new SchemeEnvironment();
var list = Scheme.list;
var map = Scheme.map;
// and so on

Полный фрагмент можно найти в сообщении в блоге автора IronScheme, леппи. Также показано, как передать лямбду C # в функцию более высокого порядка Scheme и другие интересные вещи.

2 голосов
/ 29 июля 2010

Если вы не используете IronScheme (см. Выше), я бы, вероятно, использовал что-то вроде ZeroMQ (с драйверами Common Lisp и .Net) для передачи сообщений между двумя системами.

0 голосов
/ 02 апреля 2018

Я создал легкий, встраиваемый интерпретатор языка, похожий на Scheme, специально для сложной и многоразовой конфигурации. Он занимает небольшую площадь (~ 1500 строк кода) и не представляет никакой другой зависимости от вашего приложения.

Я открыл его с работы. Это называется схема . Вот также пример приложения , демонстрирующий, как использовать его действительно сложным способом.

Я также предоставил некоторые подробные мотивы для его создания для работы в этот ответ на стекопоток .

Надеюсь, это поможет:)

0 голосов
/ 29 июля 2010

Почему бы не посмотреть на F #?

( www.fsharp.net )

Это в основном адаптация OCaml в .Net.

Или вы всегда можете использовать IronScheme , но я не думаю, что он настолько зрелый.

...