2010-10-17 18 views
5

in visual prolog esiste la sezione "domini" in un programma prolog in cui è possibile definire i tipi. C'è qualcosa di simile in swi-prolog?Definizione del tipo di Prolog in swi-prolog

In prolog visivo tipo è definito come:

domains 
NewType = thing1; thing2 

risposta

6

No. Ma v'è dichiarazione modalità in Mercury. Mercurio è più di Prolog; è una lingua functional-logic. Mercury ha ancora molta sintassi Prolog.

SWI-Prolog è un Prolog standard. Utilizza solo le dichiarazioni di modalità nella documentazione 1 come informazioni per gli utenti. Tali dichiarazioni possono essere inserite nei commenti dei moduli per la compilazione di programmi di analisi della documentazione.

In Prologs standard, al di fuori dei commenti, tali dichiarazioni sono consentite (e richieste) solo in situazioni molto speciali. Il predicato block/1 di Sicstus Prolog, ad esempio, li richiede.

Blocco/1 viene utilizzato per il co-routing (valutazione lazy, ritardo ecc.). Ho visto solo block utilizzato in un programma della mia vita, PAKCS 2, un interprete per un altro linguaggio di logica funzionale. Quando l'interprete è stato portato su SWI, non è stato utilizzato block/1.

1tipo e la modalità dichiarazioni in SWI Documentazione Fonte
2 PAKCS, un programma utilizzando il block/1 predicato (PAKCS è un'implementazione del curry lingua.)

7

Mentre SWI-Prolog non lo fa tipi di supporto in una capacità simile a quella richiesta, vale la pena notare che supporta effettivamente un semplice meccanismo di "tipo" attraverso l'uso delle specifiche dei termini tramite il predicato record/1 nella libreria record.

Questo predicato consente di specificare un termine ragionevolmente complesso 'tipo' (schema) utilizzando un particolare linguaggio di specifica del termine e lo interpreta per generare automaticamente i predicati utilizzati per eseguire la creazione (tramite un predicato costruttore), la modifica tramite 'setter' predicati e accessori tramite predicati 'getter' su istanze di termini, tutto a titolo di espansione di termini con una particolare convenzione di denominazione dei predicati.

Ciò è particolarmente utile quando si scrive codice Prolog che passa attorno a strutture di termini ragionevolmente complesse, poiché fornisce una capacità di controllo di tipo rudimentale che in genere Prolog manca (in modo nativo). L'ho usato su molti progetti Prolog su larga scala in cui le interfacce sono progettate prima dell'implementazione.