SWI-Prolog est une implémentation libre du langage de programmation Prolog , couramment utilisé pour l'enseignement et les applications web sémantiques . Elle offre un large éventail de fonctionnalités, des bibliothèques pour la programmation logique par contraintes , le multithreading , les tests unitaires , une interface graphique , l'interfaçage avec Java , ODBC et autres, la programmation littéraire , un serveur web , SGML , RDF , RDFS , des outils de développement (dont un EDI avec débogueur et profileur d'interface graphique ) et une documentation complète.
SWI-Prolog fonctionne sur les plateformes Unix , Windows , Macintosh et Linux .
SWI-Prolog est en développement continu depuis 1987. Son principal auteur est Jan Wielemaker .
Le nom SWI est dérivé de (« Informatique des sciences sociales »), l'ancien nom du groupe de l' Université d'Amsterdam , où Wielemaker était employé lorsqu'il a initié le développement de SWI-Prolog.
Modèle d'exécution
SWI-Prolog n'est pas basé sur le modèle d'exécution Warren Abstract Machine de Prolog.
Il est en réalité basé sur une version étendue de la machine virtuelle ZIP, une machine virtuelle minimale pour Prolog implémentant un langage simple composé de seulement sept instructions. Les extensions spécifiques à SWI-Prolog visent à améliorer les performances de plusieurs manières : des instructions ad hoc sont introduites pour prendre en charge l’unification , l’invocation de prédicats , certains prédicats intégrés fréquemment utilisés, l’arithmétique , le contrôle de flux et la négation comme cas d’échec . Prolog peut être facilement compilé dans ce langage, et le code machine abstrait peut être facilement décompilé en Prolog. Cette caractéristique est souvent exploitée pour entrelacer l’exécution de code compilé et interprété.
Programmation logique par contraintes
La fonctionnalité de programmation logique par contraintes (PLC) est apparue assez tardivement dans le cycle de vie de SWI-Prolog, faute de prise en charge de base. La situation a évolué début 2004 avec l'ajout des variables attribuées au langage. La bibliothèque Leuven CHR a alors été la première bibliothèque PLC à être portée sur SWI-Prolog. On peut citer la bibliothèque INCLP(R) de SWI-Prolog (De Koninck et al., 2006), qui fournit des contraintes non linéaires sur les nombres réels et a été implémentée sur CHR. Ont suivi par la suite le portage de la bibliothèque CLP(QR) de Christian Holzbaur et d'un solveur CLP(FD) pour les domaines finis. Enfin, un solveur CLP(B) booléen a été ajouté.
Extensions pour SWI-Prolog
SWI-Prolog s'installe avec un framework web basé sur des grammaires à clauses définies . Les requêtes SWI-Prolog peuvent être distribuées sur plusieurs serveurs et pages web via le système Pengines.
XPCE
XPCE est une bibliothèque d'interface graphique orientée objet et indépendante de la plateforme pour SWI-Prolog, Lisp et d'autres langages interactifs à typage dynamique . Bien que conçue pour être indépendante du langage, XPCE a surtout gagné en popularité avec Prolog. Le développement de cette bibliothèque graphique a débuté en 1987, en même temps que celui de SWI-Prolog. Elle prend en charge les boutons , les menus , les curseurs , les onglets et d'autres widgets d'interface graphique de base . XPCE est disponible pour toutes les plateformes compatibles avec SWI-Prolog.