Beaucoup étudient le Prolog à l'université, mais personnellement je n'en ai pas encore eu affaire professionnellement. Les exemples traditionnels donnés sont les applications d'IA et de systèmes experts, mais pour quelles tâches l'avez-vous utilisé et pourquoi le Prolog était-il une langue adaptée pour ces tâches ?
Réponses
Trop de publicités?Notre entreprise (www.intologic.com) utilise principalement Prolog.
C'est vraiment bon pour les systèmes basés sur des règles; a.k.a "règles métier", selon à qui vous parlez :)
Nos clients finaux sont Ericsson (pour les solutions de vente pour leurs commutateurs téléphoniques, etc.) et certaines banques et compagnies d'assurance, à qui nous fournissons les outils pour évaluer les demandes de prêt, faire des calculs de rentabilité, etc.
Nos clients aiment ne pas avoir la logique cachée dans des modules codés en dur par un programmeur avec peu ou pas d'intérêt/connaissance sur le domaine en question (comme moi!).
En fait, nous avons un outil graphique qui permet même aux non-programmeurs de dessiner toutes les règles logiques nécessaires. (Le dessin est fait dans Visio, et le code Prolog est construit directement à partir des dessins)
Tout va très bien! Le site n'est pas très souvent mis à jour ou anglicisé (nous sommes suédois), principalement parce que nous avons autant de clients que nous pouvons gérer pour le moment. La société partenaire qui nous fournit la plupart de nos clients est très enthousiaste à propos de la technologie, et ils l'utilisent pour de plus en plus de choses dans leurs propres systèmes.
Nous réalisons différentes interfaces pour le moteur de règles pour différentes fins; les clients de bureau et les clients de service web sont ceux les plus utilisés, mais il y a également une application web en développement.
Le principal problème est la connexion à C# et à d'autres langages - j'aimerais qu'ils aient une manière moins archaïque de se connecter au moteur logique que des sockets, mais la version de Prolog que nous utilisons (Sicstus) est faite en C, et a été affinée depuis de nombreuses années pour être brutalment efficace dans ce qu'elle fait.
Le premier interpréteur Erlang a été développé en Prolog par Joe Armstrong. Prolog a également été utilisé par la NASA pour construire un logiciel nommé "clarissa", pour l'ISS. Clarissa est une interface utilisateur vocale pour parcourir les procédures de la station spatiale. Il y a aussi PrologBeans, que vous pouvez utiliser pour construire même une application web (intégrée avec d'autres langages). Quant à moi, je n'ai utilisé Prolog que pour des projets d'IA à l'université...
Je développe du contenu éducatif pour un monde virtuel pour une université. Le monde virtuel dépend de beaucoup de contenu web. Par exemple, nous avons un système où les étudiants peuvent organiser des groupes de travail coopératifs qui est une application web assez "normale", un créateur de quiz, quelques outils d'analyse, etc.
Nous avons deux systèmes. Dans l'un, nous devons utiliser PHP en raison d'une folie bureaucratique. Dans l'autre, nous utilisons Prolog. Le développement dans l'environnement Prolog est beaucoup, beaucoup plus rapide pour le même programmeur sur des tâches similaires.
À côté, je travaille sur un jeu qui est partiellement dans le monde virtuel et partiellement dans une application web. L'application web est en Prolog.
Qu'est-ce que nous obtenons en utilisant Prolog?
-
nous échappons au schéma PHP habituel de stocker des données à changement lent dans des tables de bases de données. Nous accédons aux données dans les bases de données en les faisant ressembler à des faits. Une accélération massive du codage juste en étant capable de revenir en arrière pour obtenir toutes les lignes.
-
Le retour en arrière nous donne une méthode 'automatique' pour boucler sur les lignes lors de la génération du HTML à partir des données de table.
-
Nous oublions combien de temps nous, en tant qu'ingénieurs, passons à rechercher et / ou à mémoriser les contrats API. Un prédicat sert souvent de plusieurs API. Cela réduit massivement la taille du code. Et réduire massivement la taille du code réduit massivement le travail.
-
Je peux souvent vraiment penser de manière déclarative - je me surprends à créer des petits systèmes experts partout. Par exemple, en ce moment, je conçois un système de connexion / inscription pour le jeu. Parce que les gens interagissent en partie dans le monde virtuel et en partie à travers le site web, je veux qu'ils soient flexiblement 'connectés' dès que je crois qu'ils sont qui ils disent être. J'ai un petit système expert qui le fait, et je l'ai écrit en définissant ce que 'connecté' signifie. Ce genre de code, en plus d'être souvent beaucoup, beaucoup plus clair et beaucoup plus court, tend également à être exempt de bugs. Je ne suis pas un super programmeur, et j'écris souvent des programmes Prolog exempts de bugs à la première exécution (mon éditeur vérifie les erreurs de syntaxe).
-
Méta-programmation - Pas besoin de fichus design patterns! Un pattern est quelque chose que vous aimeriez avoir dans le langage mais que vous ne pouvez pas... ce qui mène à la question évidente, pourquoi pas?
-
Le code n'est pas seulement transformable en données - le code EST des données. capitale('Kansas', 'Topeka').
-
Base de données sans schéma partout. Organisez vos structures de données de manière agile. Plus précisément, vous n'avez pas de données, vous avez de la connaissance. Les données ne sont que là. La connaissance peut être raisonnée.
-
Le raisonnement par cas réduit le couplage.
-
La séparation de la programmation sans état et de la programmation étatique rend la programmation multithread plus facile (admettons que le support de thread réel est un peu douloureux). [10/2012 -Anniepoo - Je pense que c'était le reflet de mon manque de compréhension du modèle de thread. Depuis, j'ai appris à aimer le modèle de thread].
-
La destructuration radicale, le codage en tête, réduit la logique conditionnelle (toujours un bon endroit pour les bugs) et rend les cas clairs. Le code des cas limites finit souvent dans des clauses séparées.
-
C'est un monde post-objet, loin du 'maintenant créez 7 fichiers car vous avez 7 morceaux de données différents' de Java
-
Bons types de données - la structure à mesure est un type, comme les listes Lisp ou les Seq Clojure.
-
L'analyse est une opération fondamentale. Personne ne court mettre la configuration dans du XML parce qu'il n'y a pas d'autre analyseur autour. Pas de regex, nous avons du BNF complet partout (et les BNF sont, à mon avis, bien plus faciles à comprendre).
Prolog occupe une place très spéciale dans mon cœur. Voici quelques applications notables qui n'ont pas encore été mentionnées :
-
DealBuilder - construction automatique de documents juridiques
-
Arezzo - "Support de décision clinique"
-
InFlow - Analyse de réseau social (à la recherche des terroristes)
Malheureusement, aucune de ces pages web (à ma connaissance) ne mentionne Prolog, donc vous devrez me croire sur parole. Si vous le souhaitez, je peux vous envoyer les diapositives de la conférence de soutien.
Vous pourriez simplement consulter certaines des listes de clients de certaines distributions Prolog. Vous remarquerez que Prolog est généralement utilisé dans des contextes académiques et de recherche. Pourquoi c'est le cas, je n'en ai pas vraiment idée.
Prolog est dynamique, il est extrêmement bien adapté pour le prototypage rapide et il est solide pour développer des applications à plus grande échelle. C'est un langage idéal pour développer un analyseur syntaxique (parser) et coder de la logique de base de données.
En général, Prolog est associé à Java et plusieurs projets sont en cours pour améliorer l'interopérabilité Java/Prolog. Consultez jProlog et Prolog Cafe. Mais Prolog a également une interface C native.
Vous verrez également beaucoup d'utilisation de Prolog en traitement du langage naturel et en linguistique computationnelle. Ces domaines ont généralement une forte tradition Prolog.
Oui, Prolog est sous-estimé et sous-représenté, surtout dans l'industrie. Les gens pensent toujours que c'est ésotérique et tout ça, et il n'a pas la grande communauté qu'a Haskell. De plus, il souffre du même mal que le Lisp, à savoir un grand nombre d'implémentations concurrentes. Bien que SWI et Sicstus soient pratiquement les normes de l'industrie actuellement.