Prolog en ligne - IDE, éditeur, compilateur, interpréteur

RSS

Exécutez des programmes Prolog en ligne avec SWI-Prolog compilé en WebAssembly : faits, règles, récursivité, findall et format, avec affichage des erreurs et avertissements.

SWI-Prolog 10 (swipl-wasm) · S'exécute dans votre navigateur : votre code n'atteint jamais nos serveurs.
main.plProlog
Sortie

            
        
Ctrl/⌘ + Enter pour exécuter

Fonctionnalités du compilateur Prolog en ligne (IDE, éditeur & interpréteur)

Écrivez, exécutez et testez du code Prolog en ligne gratuitement. Cette page réunit un IDE Prolog en ligne, un éditeur de code, un compilateur et un interpréteur : saisissez votre code, cliquez sur Exécuter et voyez le résultat immédiatement. Tout s'exécute dans votre navigateur, sans rien à installer ni compte à créer.

  • Exécution instantanée : SWI-Prolog 10 (swipl-wasm), avec un résultat en moins d'une seconde après le premier chargement.
  • Éditeur de code : coloration syntaxique, numéros de ligne, correspondance et fermeture automatique des parenthèses.
  • Erreurs claires : les messages d'erreur et avertissements s'affichent dans le panneau de sortie, comme sur votre propre ordinateur.
  • Plein écran : Ctrl/⌘ + Shift + F, taille de police réglable, disposition côte à côte ou empilée et panneaux redimensionnables.
  • Enregistrement automatique : votre code est conservé dans votre navigateur ; téléchargez-le sous main.pl ou copiez-le en un clic.
  • Expérimentez sans risque : une limite de temps et un bouton Arrêter interrompent les boucles infinies.
  • Confidentiel : l'environnement d'exécution Prolog tourne sur votre appareil : votre code n'est jamais envoyé.
  • Mode sombre et raccourcis clavier : Ctrl/⌘ + Enter exécute le code.
  • Gratuit : sans inscription, sans limite d'utilisation.

Découvrez d'autres langages de programmation

Comment utiliser le compilateur Prolog en ligne

  1. Écrivez vos faits et vos règles dans l'éditeur, ou partez de l'exemple avec Réinitialiser l'exemple.
  2. Indiquez quoi exécuter avec une directive :- initialization(main)., où main est un prédicat qui appelle les buts que vous voulez essayer et affiche les résultats.
  3. Cliquez sur Exécuter ou utilisez Ctrl + Entrée (⌘ + Entrée sur Mac). Le programme est chargé sous la forme du fichier main.pl, et ses directives s'exécutent pendant le chargement.
  4. Consultez le panneau Sortie pour le texte affiché, les erreurs et les avertissements. Choisissez une limite de temps de 5, 15 ou 60 secondes, et utilisez Arrêter si une récursion ne se termine jamais.

L'environnement d'exécution SWI-Prolog pèse environ 4 Mo et il est mis en cache par votre navigateur après la première visite. Conservez votre programme avec Copier ou le téléchargement de main.pl, redimensionnez le texte avec A− et A+, changez la disposition des panneaux avec le bouton de disposition, et utilisez Plein écran (Ctrl/⌘ + Maj + F, Échap pour quitter) pour les programmes plus longs.

Tout s'exécute dans votre navigateur. Le programme n'est jamais envoyé à un serveur, et l'éditeur n'enregistre votre dernière version que dans le stockage local de votre navigateur.

Ce qui est pris en charge

La page utilise SWI-Prolog 10 compilé en WebAssembly (swipl-wasm). C'est le véritable système SWI-Prolog, pas un interpréteur simplifié.

  • Chargement d'un fichier : votre code est chargé exactement comme le ferait consult('main.pl'), si bien que les clauses, les opérateurs et les directives fonctionnent tous.
  • Prédicats de sortie : format/2, write/1, writeln/1, print/1 et nl/0 affichent tous dans le panneau de sortie.
  • Listes et prédicats de toutes les solutions : member/2, append/3, length/2, msort/2, findall/3, bagof/3, setof/3, forall/2.
  • Arithmétique avec is/2 et les opérateurs de comparaison, sur des entiers et des flottants. Le 20! de l'exemple est calculé exactement.
  • Diagnostics tels que SWI-Prolog les affiche, par exemple les avertissements de variable singleton et des erreurs comme ERROR: ... Arithmetic: `foo/0' is not a function.

Ce qui diffère d'un Prolog de bureau :

  • Il n'y a pas d'invite de requête ?- interactive : vous ne pouvez donc pas taper des requêtes et appuyer sur ; pour obtenir d'autres réponses. Placez les requêtes dans main et affichez les réponses, ou récupérez-les toutes avec findall/3 ou forall/2.
  • Pas d'entrée standard. read/1 n'a rien à lire : écrivez donc vos données de test sous forme de faits.

Les bases de Prolog en un programme

% Faits
likes(mary, wine).
likes(john, wine).
likes(john, mary).

% Une règle : X et Y sont amis si tous deux aiment la même chose
friends(X, Y) :- likes(X, Z), likes(Y, Z), X \== Y.

% Récursion sur une liste, avec un accumulateur
sum_list_acc([], Acc, Acc).
sum_list_acc([H|T], Acc0, Sum) :- Acc1 is Acc0 + H, sum_list_acc(T, Acc1, Sum).

% Le cut (!) s'engage sur la première clause qui correspond
max(X, Y, X) :- X >= Y, !.
max(_, Y, Y).

main :-
    findall(X-Y, friends(X, Y), Pairs), writeln(Pairs),
    sum_list_acc([1,2,3,4], 0, S), format("sum = ~w~n", [S]),
    max(3, 7, M), format("max = ~w~n", [M]).

:- initialization(main).

L'exécution affiche [mary-john,john-mary], sum = 10 et max = 7.

Pièges courants

  • = est l'unification, pas une affectation ni un calcul. X = 1 + 2 lie X au terme 1+2. Utilisez X is 1 + 2 pour l'évaluer, et =:= pour comparer deux nombres.
  • Les variables commencent par une majuscule ou par _. name est un atome et Name une variable : une faute de casse change donc silencieusement le sens d'une clause.
  • Les avertissements singleton signifient qu'une variable n'apparaît qu'une fois dans une clause, ce qui est généralement une faute de frappe. Renommez-la en _ ou _Name si elle est inutilisée volontairement.
  • Utilisez le cut avec précaution. Le max/3 ci-dessus convient pour max(3, 7, M), mais la deuxième clause dépend du cut, si bien que max(5, 3, 3) réussit à tort. Écrire max(X, Y, Y) :- X < Y. comme deuxième clause le rend sûr. Un cut mal placé peut aussi masquer des solutions que findall renverrait autrement.
  • La récursion à gauche boucle. Une règle comme ancestor(X, Y) :- ancestor(X, Z), parent(Z, Y). s'appelle récursivement à l'infini. Placez d'abord le but parent.
Astuce : si main échoue au lieu de réussir, SWI-Prolog affiche un avertissement indiquant que le but d'initialisation a échoué. Ajoutez des appels à writeln/1 entre les buts pour voir jusqu'où le programme va.

Questions fréquentes

Comment exécuter une requête en Prolog ?

Écrivez-la dans un prédicat comme main et ajoutez :- initialization(main). à la fin du fichier. Vous pouvez aussi placer un but directement dans une directive, par exemple :- X is 2^10, writeln(X).

Est-ce du Prolog standard ?

C'est SWI-Prolog, qui suit la norme ISO et y ajoute de nombreuses extensions. Un texte entre guillemets doubles est une chaîne dans SWI-Prolog, ce qui compte si vous avez l'habitude qu'il désigne une liste de codes de caractères.

Puis-je obtenir toutes les réponses à une requête ?

Oui. Utilisez findall/3 pour les collecter dans une liste, ou forall/2 pour afficher chacune d'elles, comme le fait le programme d'exemple.

D'autres langages logiques ou fonctionnels sont-ils disponibles ?

Essayez l'Interpréteur Scheme en ligne ou le Compilateur Clojure en ligne, ou consultez tous les compilateurs en ligne.

Mis à jour

Commentaires

Aucune évaluation pour l’instant

Connectez-vous pour noter cet outil.

Partagez une astuce, posez une question ou racontez comment l’outil a fonctionné pour vous.

Aucun commentaire pour l’instant. Soyez le premier à raconter votre expérience.

Copié dans le presse-papiers