2011-01-07 2 views
0

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]). 

Répondre

1

Il y a une erreur de syntaxe dans test_convert1/1. Il convient de lire

test_convert1(F) :- 
    phrase(convert1(F), [X, or, Y]). 
+0

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

+0

@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'. –

+0

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

1

Votre code comprend deux erreurs:

  1. Dans la première clause vous ne lisez pas X dans la liste analysable.
  2. Les coupes dans les DCG doivent être à l'extérieur des accolades.

Une version de travail est:

convert1(atom(X)) --> [X], {var(X)}, !. 
convert1(or(X,Y)) --> convert1(X), [or], convert1(Y). 
+0

Salut, merci de signaler les erreurs. Il n'y a toujours pas de réponses pour une raison quelconque. Cela vous dérangerait-il de jeter un coup d'œil? Je pense que c'est probablement dans le test_convert/1? – ale

Questions connexes