Je suis en train de convertir cette notation:Prolog DCG: Conversion de la notation de la programmation à la notation logique
A and (B or C) equ A and B or A and C)
à la notation logique standard dire des choses comme and(A,B), or(A,B), neg(A)...
Je pensais que je belle façon de faire il utiliserait des DCG (j'ai inventé cette question parce que je veux pratiquer des DCG). Des idées pour lesquelles ma conversion ne fonctionne pas? Jusqu'à présent, je viens d'écrire la disjonction et le cas lorsque nous obtenons une variable. La réponse que je veux devrait être ou (atome (X), atome (Y)).
convert1(atom(X)) --> [X], {var(X)},!.
convert1(or(X,Y)) --> convert1(X), [or], convert1(Y).
test_convert1(F) :-
phrase(convert1(F), [X, or, Y]).
Merci larsman, argh si bête. Cela n'a pas résolu mon problème. Je viens de faire une erreur de copier/coller en mettant le code sur ici. Merci quand même. – ale
@imperial, alors quelle partie ne fonctionne pas? Je reçois la sortie 'X = ou (atome (_G443), atome (_G449))', ce qui est exactement ce à quoi je m'attendais. Si vous voulez voir 'X' et' Y' dans la sortie, n'utilisez pas 'var/1'. –
Vraiment: S! Comment l'appelez-vous? Je voulais appeler test_convert1 (F) et pour que ça sorte ce que tu as dit ... Hmmmm désolé je vais probablement faire quelque chose de vraiment idiot. – ale