Question

Comme beaucoup de personnes l'ont souligné dans cette question , Lisp est principalement utilisé comme expérience d'apprentissage. . Néanmoins, ce serait formidable si je pouvais utiliser mes algorithmes Lisp et les combiner avec mes programmes C #. Au collège, mes profs ne pourraient jamais me dire comment utiliser mes routines Lisp dans un programme (non, ne pas écrire une interface graphique dans Lisp, merci). Alors, comment puis-je?

Était-ce utile?

La solution

Essayez ces implémentations .Net de Lisp:

  

IronScheme aura pour objectif d’être un R6RS   conforme Scheme mise en œuvre basée   sur le Microsoft DLR.

  

L Sharp .NET est un puissant Lisp-like   langage de script pour .NET. Il utilise un   Lisp similaire à Arc mais   s'intègre étroitement avec le .NET   Cadre qui fournit un riche ensemble de   bibliothèques.

Autres conseils

Clojure est une Lisp-1 qui est compilée -fly vers le bytecode Java, conduisant à de très bonnes performances d'exécution. Vous pouvez utiliser Clojure et le compiler de manière croisée dans un assemblage .NET à l'aide de ikvmc de IKVM . . Bien sûr, lorsqu'il est utilisé dans .NET, Clojure génère volontiers .NET IL, ce qui permet d'obtenir les mêmes performances en termes de code compilé que celles que vous pouvez attendre lorsque vous les utilisez sur une machine virtuelle.

S'il ne s'agit que des routines que vous souhaitez utiliser, vous pouvez essayer LSharp, ce qui vous permet d'avoir des expressions Lisp dans .NET:

http://www.lsharp.org/

L’inverse (en utilisant .NET à partir de Lisp) serait RDNZL:

http://www.weitz.de/rdnzl/

Le SDK .Net 1.1 contient un exemple de compilateur LISP. Voir SDK \ v1.1 \ Guide du développeur d'outils \ Samples \ clisp

Je sais que c'est une très vieille question. Mais je vais essayer de fournir une réponse à partir de ma propre expérience et de ma perspective.

Pour ceux qui, comme nous, aiment la pureté, l’élégance et la simplicité de Scheme / Lisp, j’espère que cela vous donnera des encouragements et de l’inspiration pour qu’ils puissent être très utiles dans une production réelle:)

J'ai récemment ouvert à la source un interprète de type Scheme intitulé schemy , écrit en C # ( ~ 1500 lignes de code). Et voici la motivation et son utilité -

Sans trop entrer dans les détails, je construisais un serveur API Web dont la logique de traitement des demandes devait être prête à l'emploi par d'autres développeurs / scientifiques. Il y avait une demande claire de séparation des préoccupations ici - le serveur ne se préoccupe pas beaucoup de la logique de traitement des demandes, mais il a besoin de savoir quelles demandes il peut gérer et où trouver et charger la logique de la manutentionnaires.

Ainsi, au lieu de mettre en œuvre les gestionnaires dans l’application serveur, le serveur ne fournit que des & blocs & réutilisables. qui peuvent être chaînés en fonction de certains critères et de la logique pour former un pipeline , c’est-à-dire des gestionnaires définis via la configuration . Nous avons essayé JSON / XML pour décrire un tel pipeline et nous avons vite compris que je construisais essentiellement un analyseur syntaxique abstrait .

C’est à ce moment-là que j’ai réalisé que c’était une demande pour un petit langage léger, basé sur l'expression s. C’est pourquoi j’ai implémenté l’interprète rel="nofollow noreferrer"> schemy .

Je mets un exemple d'application de gestion de commandes ici , qui capture l'essence de la philosophie de conception pour le serveur Web que j'ai mentionné ci-dessus. Cela fonctionne comme suit:

  1. Il étend un interpréteur Schemy intégré avec certaines fonctions implémentées en C #.

  2. Il trouve .ss des scripts qui définissent un pipeline de traitement de commande à l'aide de ceux mis en œuvre des fonctions.

  3. Le serveur trouve et conserve le pipeline de composition à partir d'un script en rechercher le symbole EXECUTE qui devrait être de type Func<object, object>.

  4. Quand une demande de commande arrive, elle appelle simplement le correspondant processeur de commande (celui défini par man <unix_command>), et les réponses avec résultat.

Enfin, voici un exemple de script complexe fournissant une recherche de page de manuel en ligne via ce serveur de commande TCP:

Avec ce script chargé par le serveur de commandes, un client TCP peut envoyer des commandes <=> au serveur:

$ ncat 127.0.0.1 8080

man ls

LS(1)                   FreeBSD General Commands Manual                  LS(1)

NAME
     ls -- list directory contents

SYNOPSIS
     ls [--libxo] [-ABCFGHILPRSTUWZabcdfghiklmnopqrstuwxy1,] [-D format]
        [file ...]

DESCRIPTION
     For each operand that names a file of a type other than directory, ls
     displays its name as well as any requested, associated information.  For
     each operand that names a file of type directory, ls displays the names
     of files contained within that directory, as well as any requested,

Peut-être devriez-vous jeter un coup d’œil à L #. Je ne sais pas si c'est ce que vous recherchez (vous n'avez pas touché à Lisp depuis l'université), mais cela vaut peut-être la peine de vérifier.

http://www.lsharp.org/

Il existe également un DotLisp .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top