10
votes

Définition des listes dans les scripts Prologs

Je suis nouveau à la programmation de Prolog et j'ai été informé dans un didacticiel de définir une liste de structures (dans un script) afin que je puisse la demander comme une base de données. Cependant, je trouve impossible de définir cette liste comme une variable dans un script. Lorsque je définis une liste telle que xxx

je viens de recevoir une erreur disant xxx

est-ce que prologit ne prend pas en charge la définition de variables telles que ceci? J'utilise Swi-Prolog sous Linux.


0 commentaires

5 Réponses :


1
votes

Non, vous ne pouvez pas le faire comme ça. Qu'est-ce que vous écrivez fondamentalement: xxx pré>

et comme l'erreur indique que vous ne pouvez pas redéfinir = / 2 p>

ce que vous pouviez faire est: p>

...
x(X),
foo(X)
...


0 commentaires

8
votes

Lorsque vous écrivez xxx

c'est lue comme xxx

qui est lu comme une définition d'un fait concernant le = / 2 prédicat. Un fait où toute variable libre serait égale à [a, b, c] . C'est-à-dire que vous redéfinissez = / 2 . Ce n'est évidemment pas ce que vous avez l'intention!

Vous devez vous souvenir de Prolog que les variables ne sont conçues que localement, à l'intérieur d'un prédicat. Ce qui fonctionnerait: xxx


0 commentaires

21
votes

en prologs, nous parlons de Variables logiques , pour signifier identité entre littéraux .

C'est-à-dire, un programme c'est un ensemble de Les règles qui indiquent collectivement ce qui est vrai sur nos littéraux et que les littéraux sont non interprétés . Nous écrivons des règles en utilisant variables pour décrire les relations sur des individus et tout en essayant de prouver que notre requête peut devenir vraie, prolog liets les variables comme des règles dicter .

A Liste Il s'agit simplement de sucre de syntaxe pour une relation binaire entre un terme (la la tête ) et (note la récursivité ici) a Liste . Habituellement, quand on parle d'une base de données , nous utilisons des faits (règles sans corps, toujours vrai) qui lie les littéraux atomiques.

de sorte que le tutoriel exprime probablement la tâche dans différents mots que vous rapportez, ou c'est quelque peu trompeur. Vous pouvez toute façon que vous puissiez stocker des listes de votre base de données comme telles: xxx

et écrire votre programme comme: xxx

alors vous pouvez Requête votre programme comme: xxx

et prolog, essayant de prouver myProg / 1, tenter de prouver myList / 1 et membre / 2 ... Pour prouver myList (l) la variable l lié à [A, B, C].

hth


0 commentaires

2
votes

J'utilise SwiPL sous Linux, pour définir une liste dans Prolog.

?- mylist(A).


0 commentaires

1
votes

si y = [A, B, C], après la fonction Fonction Makelist (Y, F) Appel d'appel, f = [A, B, C] STRY>

?- makeList([a,b,c],X).
X = [a,b,c].


0 commentaires