3

J'ai une question très simple pour les programmeurs Prolog. Cela devrait être très facile, mais je n'ai aucune expérience avec cette langue alors s'il vous plaît aider. J'essaie d'interpréter un langage de programmation simple dans Prolog. Dans cette langue, je peux avoir deux types de variables - des variables simples et des variables de tableau. J'ai une fonction qui calcule la valeur de la variable donnée:Comment faire correspondre les variables enveloppées dans PROLOG sans la coupe?

%calc(+var, +state, -result) 

variable peut être une simple variable comme x ou variable de tableau comme array(ident, index). Je ne sais pas comment je devrais écrire cette fonction dans Prolog, donc cela fait des choses différentes pour les variables régulières et de tableau. Je suis venu avec quelque chose comme ceci:

calc(array(Ident,I), S, R) :- calculating R for array var, !. 
calc(Ident, S, R) :- calculating R for regular var. 

Cela fonctionne, mais il doit y avoir une meilleure façon.

+1

Il n'y a pas vraiment beaucoup de détails ici pour dire s'il y a un bien meilleur moyen, mais ce que vous avez là-bas semble raisonnable. Si vous voulez éviter la coupure, vous pouvez faire 'calc (Ident, S, R): - (Ident = tableau (Id, I) -> calc_array (Id, I, S, R); calc_var (Ident, S, R) 'ou quelque chose comme ça – lurker

+0

Oui, j'essayais d'éviter la coupure et cela ressemble à un bon moyen de le faire. –

Répondre

3

Il existe un moyen propre de le faire: Utilisez un wrapper dédié pour les variables, de sorte que vous pouvez les identifier via la correspondance de modèle. Par exemple:

calc(array(Ident,I), S, R) :- calculating R for array var. 
calc(variable(Ident), S, R) :- calculating R for regular var. 

je foncteur variable/1 pour identifier les variables.

Aucun !/0 n'est nécessaire pour gérer cette représentation et vous pouvez utiliser vos prédicats comme relations réelles, c'est-à-dire dans toutes les directions.

Vous pouvez avoir besoin d'une étape de prétraitement qui enveloppe les variables avec un foncteur dédié pendant ou après l'analyse d'un programme donné. Après cela, vous avez cette représentation propre et pouvez utiliser la correspondance de modèle tout au long de votre programme.

Questions connexes