2010-07-28 12 views
6

En mi software existente tengo una implementación de programación genética usando un árbol de toma de decisión local que puede aplicar operadores lógicos básicos (AND O NOT) en algunos datos booleanos que se proporcionan a en forma de una matriz. La plataforma que estoy usando es .NET/C# con SQLServer back end. Buscando la manera de mejorar el rendimiento de mi programa genético, concluí que necesitaba casi todas las funcionalidades adicionales que vienen con un lenguaje funcional y creo que Scheme o en menor medida LISP son las mejores soluciones, a menos que quiera implementar características como COND, IF, operadores de comparación, etc. extiendo la implementación existente.Llamar a LISP o SCHEME desde .NET/C#

Mi pregunta al foro es si hay alguna forma eficiente de llamar a Scheme (o LISP) desde una aplicación .NET pasando los datos hacia atrás y hacia delante en alguna forma de matriz. Si esto no es posible, ¿crees que será mejor simplemente morder la bala e implementarlo desde cero o debería buscar formas alternativas, como por ejemplo comunicar usando un archivo de texto?

+0

En general, Lisps necesita un tiempo de ejecución que no es el mismo que el .NET runtime, por lo que llamarlos va a ser difícil. La última vez que tuve que mezclar C, Fortran y Common Lisp (y eso fue hace más de quince años), tuve que hacer que el programa principal fuera Lisp. –

+0

ESQUEMA es-un LISP. – Ken

Respuesta

0

¿Por qué no mirar F #?

(www.fsharp.net)

Es básicamente una adaptación de OCaml en .Net.

O siempre puede usar IronScheme, pero no creo que sea tan maduro.

+1

¿Qué pasa con IronScheme? – sukru

+0

Lo que está mal con IronScheme aquí es que le preocupa el rendimiento; F # tiene una ventaja considerable allí y proporciona todas las bondades de lenguaje funcional que podrías pedir. En la mayoría de los casos, IronScheme es genial. – JasonFruit

5

Hay una implementación del Esquema conforme con R6RS para el DLR llamado IronScheme. Desde IronScheme utiliza el DLR, que puede ser embebido en cualquier aplicación .NET usando el DLR estandarizada incrustación de API exactamente de la misma manera que lo haría integrar, por ejemplo, IronRuby o IronPython:

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

El fragmento completo se puede encontrar en a blog post por el autor de IronScheme, leppie. También muestra cómo pasar un C# lambda a una función Scheme de orden superior y otras cosas interesantes.

2

A menos que vaya con IronScheme (arriba), probablemente usaría algo como ZeroMQ (que tiene los controladores Common Lisp y .Net) para pasar mensajes entre los dos sistemas.

Cuestiones relacionadas