Je suis en train d'écrire du code Prolog pour déterminer si la variable est liée X
dans le cadre de la variable liée Y
dans une liste. Les listes peuvent être imbriquées et X
est dans le champ Y
si X
et Y
sont membres de la même liste ou si X
est membre d'une liste qui est membre d'une liste qui est membre d'une liste ... (imbriquées indéfiniment) qui se trouve dans la même liste que Y
. Ici, je in_scope(X,Y,List)
définis signifie que X
est dans le champ d'application de Y
dans la liste extérieure List
. J'ai écrit le code suivant, mais ce code se traduit par un débordement de pile:débordement de pile dans Prolog
in_scope(X,Y,List) :- in(Parent,List), member(X,Parent), member(Y,Parent).
in_scope(X,Y,List) :- in(X,Parent), in_scope(Parent,Y,List).
in(X,Y) :- member(X,Y).
in(X,Y) :- member(X,Z), in(Z,Y).
Je vous serais reconnaissant de l'aide à modifier le code pour éviter le débordement de la pile.
Merci! Et 'in_sublist (X, Sub)' devrait-il être 'in (X, Sub)'? – sentinel
Oui, mes excuses. J'avais renommé le prédicat, puis l'ai renommé. –
De rien. J'ai trouvé au moins un bug dans le prédicat 'in/2'. Changer les noms des variables pour quelque chose d'intelligible a beaucoup aidé :) –