Qi (lingua)

Qi
Paradigmi funzionale , logico
Autore Mark Tarver
Sviluppatori Mark Tarver et al.
Digitando statico , dinamico
Influenzato da Haskell , ML , Lisp , Prolog
Sistema operativo Multi piattaforma
Sito web http://www.lambdassociates.org/

Qi è un linguaggio di programmazione funzionale creato da Mark Tarver, introdotto inAprile 2005e distribuito con licenza GPL. Qi è scritto in Lisp . Include la maggior parte delle caratteristiche comuni alla programmazione funzionale: filtraggio, curry , inferenza di tipo , digitazione statica , digitazione dinamica , protezione e applicazione parziale. Questa lingua ha vinto nel 2003 il Promising Invention Award dalla State University di New York .

La base della lingua Qi

In un certo senso, Qi vuole essere una semplificazione del linguaggio Lisp . Le funzioni usano la notazione prefissata.

Un programma che stampa Hello World sullo standard output:

(output "Hello, world~%")

Le liste sono costruite con [....] e gli elementi sono separati da uno spazio.

[76 trombones]

La funzione fattoriale definita utilizzando il filtraggio  :

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

Una funzione anonima che moltiplica per 2.

(/. X (* X 2))

Una funzione membro che utilizza il filtro sugli elenchi (Qi segue la sintassi convenzionale Edinburgh Prolog per il filtro, tranne per il fatto che gli spazi vengono utilizzati al posto delle virgole per separare gli elementi).

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

Una funzione che utilizza la guardia che cerca il primo numero maggiore di N in un elenco.

(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 è una versione del linguaggio Prolog implementato in Qi, utilizzando la sintassi standard di Edimburgo. Ecco un esempio di base in Qi Prolog:

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

E per interrogare la knowledge base di Prolog:

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

link esterno