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 je viens de recevoir une erreur disant p> est-ce que prologit ne prend pas en charge la définition de variables telles que ceci? J'utilise Swi-Prolog sous Linux. P> P>
5 Réponses :
Non, vous ne pouvez pas le faire comme ça. Qu'est-ce que vous écrivez fondamentalement: 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)
...
Lorsque vous écrivez c'est lue comme p> qui est lu comme une définition d'un fait concernant le 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: p> = / 2 code> prédicat. Un fait où toute variable libre serait égale à
[a, b, c] code>. C'est-à-dire que vous redéfinissez
= / 2 code>. Ce n'est évidemment pas ce que vous avez l'intention! P>
en prologs, nous parlons de Variables logiques em>, pour signifier identité em> entre littéraux em>. 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 em>. Nous écrivons des règles en utilisant variables em> pour décrire les relations em> sur des individus et tout en essayant de prouver que notre requête peut devenir vraie, prolog liets em> les variables comme des règles dicter . p> A em> Liste em> Il s'agit simplement de sucre de syntaxe pour une relation binaire entre un terme (la la tête em>) et (note la récursivité ici) a Liste em>. Habituellement, quand on parle d'une base de données em>, nous utilisons des faits (règles sans corps, toujours vrai) qui lie les littéraux atomiques. P> 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: p> et écrire votre programme comme: p> alors vous pouvez Requête votre programme comme: p> et prolog, essayant de prouver myProg / 1, tenter de prouver myList / 1 et em> membre / 2 ...
Pour prouver myList (l) la variable em> l lié à [A, B, C]. P> hth p> p>
J'utilise SwiPL sous Linux, pour définir une liste dans Prolog.
?- mylist(A).
?- makeList([a,b,c],X).
X = [a,b,c].