Bonjour, je me demandais si vous pouviez m'aider avec cette
de la programmation de Prolog: écrivez un script PROG pour le remplacement de tout élément donné dans les listes par un autre élément donné. Par exemple: p> Merci beaucoup d'avance p> p>
5 Réponses :
Dans Prolog, la plupart des traitements de la liste sont effectués en traitant la tête, puis le traitement de la liste de la liste. Bien sûr, vous ne pouvez pas oublier le boîtier de base, qui est une liste vide.
Remplacement de quelque chose avec quoi que ce soit dans une liste vide Résultats à nouveau dans une liste vide. Si la tête de la liste est la même que l'élément à remplacer, remplacez-le, sinon, gardez-le tel qu'il est. Dans les deux cas, traitez récursivement le reste de la liste. Traduit de l'anglais en prolog: p>
replace(_, _ , [], []). replace(X, Y, [ X | Z ], [ Y | ZZ]):- ! , replace( X, Y, Z, ZZ). replace(X, Y, [ W | Z], [ W | ZZ] :- replace(X, Y, Z, ZZ). Though, one would usually arrange the 3. arg to be the first one. And strictly speaking above does not replace anything in the list, it just anwsers if 4th arg is like the one in the 3rd but with Y' instead of X'.
replace(E,S,[],[]). replace(E,S,[E|T1],[S|T2]):-replace(E,S,T1,T2). replace(E,S,[H|T1],[H|T2]):-E\=H, replace(E,S,T1,T2). the idea is simple, if the elements match, change it, if not, go forward until empty.
domains I=integer* K=integer* Z=integer A=integer predicates nondeterm rep(I,Z,A,K) clauses rep([],_,_,[]). rep([Z|T1],Z,A,[A|T2]):- rep(T1,Z,A,T2). rep([H|T1],Z,A,[H|T2]) :- rep(T1,Z,A,T2). goal rep([1,2,3],2,4,X).
tous les implémentations EM> présentés jusqu'à présent dans d'autres réponses sont logiquement non fidèles em> lorsqu'ils sont utilisés avec des termes non fondés. Considérez la requête d'origine et une légère variante: Ça fonctionne! Demandons quelques requêtes très similaires: p> Qu'est-ce qui se passe? EM> Mettez le blâme em> sur sur sur intégré méta-logique em> pour préserver la solidité logique em>, Stick sur la pureté logique forte> et l'abstention de "fonctionnalités" méta-logiques " dès que possible! Heureusement, la plupart des implémentations de Prolog support prennent en charge exécutons à nouveau au-dessus des requêtes, cette fois avec l'amélioration de
(!) / 0 code> et
(\ = =) / 2 code>, qui sont très difficiles à utiliser le droit em> et Souvent rendez le code fragile, impur et logiquement malsain. p>
DIF / 2 code> comme alternative logique à
(\ =) / 2 code>. Utilisons-le: p>
remplac / 4 code>: p>
Je n'ai pas encore essayé encore, je ne suis pas sûr de savoir comment y aller.