Skip navigation.
Home
Des articles plus frais

Qi (langage)


Qi est un langage de programmation fonctionnelle créé par Mark Tarver, introduit en avril 2005 et distribué sous licence GPL. Qi est écrit en Lisp. Il inclu la plupart des fonctionnalités communes à la programmation fonctionnelle: le filtrage, la curryfication, inférence de types, typage statique, typage dynamique, la garde (informatique) et l'application partielle. Ce langage a remporté en 2003, le prix Promising Invention Award de Université d'État de New York.

La base du langage Qi

Par certains côtés, Qi se veut une simplification du langage Lisp. Les fonctions utilisent la notation préfixée.

Un programme qui affiche Hello World sur la sortie standard :

(output "Hello, world~%")

Les listes se construisent avec [ .... ] et les éléments sont séparés par un espace.

[76 trombones]

Une fonction factoriel en utilisant le filtrage :

(define factorial 0 -> 1 N -> (* N (factorial (- N 1))))

Une fonction anonyme qui multiplie par 2.

(/. X (* X 2))

Une fonction membre utilisant le filtrage sur les listes. (Qi suit la syntaxe conventionelle du Edinburgh Prolog pour le filtrage, sauf que des espaces sont utilisées au lieu de la virgule pour séparate les éléments.)

(define member _ [] -> false X [X _] -> true X [_ Y] -> (member X Y))

Une fonction utilisant la garde (informatique) qui cherche le premier nombre plus grand que N dans une liste.

(define find_greater N [] -> (error "no number greater than ~A.~%" N) N [M _] -> M where (> M N) N [_ Ns] -> (find_greater N Ns))

Qi Prolog

Qi Prolog est une version du langage Prolog mise en oeuvre en Qi, en utilisant la syntaxe standard d'Edinburgh. Voici un exemple de base en Qi Prolog:

(defprolog "dog(snoopy). man(socrates). man(plato). mortal(X) :- man(X).")

Et pour interoger la base de connaissance Prolog:

(ask [ man plato ] ) (ask [ man snoopy ] ) (ask [ dog X ] ) (ask [ man M ] )

Liens externes