Prolog
Prolog est un langage destiné à l'intelligence artificielle qui a été créé au début des années 1970 par Alain Colmerauer. Son nom est la contraction de "programmation en logique". Il peut être utilisé dans des domaines tels que le traitement des langues naturelles, les systèmes experts, la CAO ou les bases de données. "Programmation en logique" ne signifie pas que les autres langages en manquent mais que Prolog est en fait une traduction informatique des prédicats manipulés par la logique du premier ordre.
Les programmes Prolog ne définissent pas des algorithmes, c'est-à-dire des enchaînements d'instructions destinés à traiter des problèmes ciblés, mais des ensembles de clauses constituant un "espace" qui sera exploré à l'aide d'un moteur fondé sur le calcul des prédicats chaque fois qu'une interrogation sera posée. Les clauses élémentaires sont les faits et les règles. Un fait est par exemple la traduction de "Georges est né à Marseille" ou "Marseille est une ville française". Une règle est basée sur une condition (si) comme "X est français si X est né dans une ville française". Avec les clauses ci-dessus le système peut répondre à la question "Georges est-il français ?" par oui ou par non. Si une énumération de lieux de naissances de plusieurs personnes et d'emplacement de villes dans divers pays est donnée, ce qui constitue une base de faits, l'ordinateur pourra répondre à une question équivalant à "quels sont les Français de la liste ?".
Il est à noter que les clauses ne contiennent aucune sémantique, c'est-à-dire qu'il n'y a pas de signification particulière pour la machine et qu'elles ne servent qu'à évaluer l'ensemble des possibilités. En réalité, on peut écrire dans le programme "Marseille est né à Georges" parmi d'autres faits, ce qui serait un bug car cela serait utilisé tel quel et fausserait certains résultats. Des règles plus élaborées peuvent être écrites telles que "X est le frère de Y si X est un homme et que X a les mêmes parents que Y et que X n'est pas Y". Si la dernière condition était oubliée, l'interrogation "quels sont les frères d'Alain ?" donnerait une liste incluant "Alain" et "quels sont ceux qui n'ont aucun frère" aurait toujours 0 résultat (sauf qu'il y a une erreur dans cette phrase).
Des combinaisons plus subtiles peuvent être écrites comme "il y a un chemin de A à B si A est directement reliée à B ou si A est directement reliée à C et qu'il y a un chemin de C à B" (récursivité). Les ou sont traités par des énumérations et l'ordre y est très important, pouvant conduire en cas d'erreur à des résultats systématiquement faux ou à des blocages. Mais là Prolog a un trait particulièrement intéressant. Les langages de programmation ressemblent aux langues naturelles, avec les ambiguïtés en moins. Comme Prolog était destiné dès l'origine à traiter celles-ci, il peut aussi décortiquer des programmes respectant sa propre syntaxe. Il est certainement possible de trouver une partie des bugs flagrants ou probables qui sont présents dans l'un d'eux. Il suffit pour cela que les clauses décrivant ce problème soient incluses dans l'environnement de programmation et utilisées par une fonctionnalité lancée à la demande.