Question

Prolog visuel il y a section « domaines » dans un programme Prolog dans lequel vous pouvez définir des types. Y at-il quelque chose similaire dans SWI-Prolog?

Dans Prolog visuel est défini comme un type:

domains
NewType = thing1; thing2
Était-ce utile?

La solution

Non

. Mais il y a déclaration de mode dans Mercury . Le mercure est plus Prolog; il est un langue fonctionnelle logique. Le mercure a encore beaucoup de syntaxe Prolog.

SWI-Prolog est un Prolog standard. Il utilise uniquement des déclarations de mode dans la documentation 1 que des informations pour les utilisateurs. De telles déclarations peuvent être placées dans les commentaires de modules pour les programmes-analyse documentation à la compilation.

Dans Prolog standard, en dehors des commentaires, ces déclarations ne sont autorisés (et reqired) dans des situations très particulières. Le bloc / 1 de prédicat Sicstus Prolog par exemple leur demande.

Bloc / 1 est utilisé pour co-routage (évaluation paresseuse, le retard, etc.). Je ne l'ai vu block utilisé dans un programme dans ma vie, PAKCS 2 , un interprète pour une autre langue fonctionnelle logique. Lorsque l'interprète a été porté à SWI, block/1 n'a pas été utilisé.

1 déclarations de type et le mode dans SWI Source Documentation
2 PAKCS, un programme à l'aide du prédicat block/1 (PAKCS est une mise en œuvre de la curry langue.)

Autres conseils

Alors que SWI-Prolog ne supporte pas les types dans une capacité tout à fait comme ce que vous vous demandez, il convient de noter qu'il ne supporte en effet un mécanisme simple « type » grâce à l'utilisation de la spécification terme via le enregistrement / 1 prédicats dans la bibliothèque de record.

Ce prédicat vous permet de spécifier un raisonnable terme complexe « type » (motif) en utilisant un langage de spécification particulière à long terme, et l'interprète de générer automatiquement des prédicats utilisés pour réaliser la création (via un prédicat constructeur), la modification par « poseur » prédicats et accesseurs via « getter » prédicats sur les instances de terme, tous au moyen de terme d'expansion avec une convention de nommage prédicat particulier.

Ceci est particulièrement utile lors de l'écriture du code Prolog qui passe autour des structures raisonnablement terme complexes, car il vous offre une capacité de vérification de type rudimentaire qui Prolog manque généralement (en mode natif). Je l'ai utilisé sur beaucoup ce projet Prolog à grande échelle où les interfaces sont conçues avant la mise en œuvre.

Je me suis souvenu de lire sur les types de Swi & Yap Prolog. Voici un site Web avec un "type Hindley-Milner Checker pour Prolog:"

Types de Prolog - déclarations de type de style Mercury et prédicats signatures

Prolog Type de bibliothèque Vérificateur

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top