Comment puis-je simuler une boucle while en Prolog par immuable conditions?

Donc, fondamentalement, je suis en train de simuler un code C en Prolog.

Il est facile de simuler boucle while en Prolog est Ici le cas:

Code C:

int a = 1;

while(N)
{
  N--;
  a++; 
}

Prologue code:

prolog_while(0) : !
prolog_while(N, A) :
   N1 is N -1,
   A1 is A + 1,
prolog_while(N1, A1).

Un problème est comment faire pour simuler une boucle while en Prolog par immuable conditions?

Est ici le cas:

int n = 1;
int a = 1;

while(1)
{
   if (N==0)
     goto while_end;
   else
    {
        N--; A++;
    }       
}

Ou

while(1)
{
   if (N==0)
     break;
   else
    {
        N--; A++;
    }       
}

Je sais que c'est un peu bizarre, mais, fondamentalement, ce genre de C code est automatiquement généré par une source de l'outil d'analyse de code, donc je m'en occupe...

En gros comment puis-je simuler dans le Prologue? Est-il faisable?

Quelqu'un pourrait-il me donner un peu d'aide?

===================mise à jour============

J'ai essayé d'écrire quelques Prologue du code dans ce sens, mais, fondamentalement, je ne sais toujours pas comment gérer test de la clause.

main :- loop_entry(2, 1), write(N), nl, write(A), nl.

do(A, N, A1, N1) :- A1 is (A + 1), N1 is (N - 1).
test(N) :- ...                 <----- # How to write this part?
loop_entry(N, A) :-
    test(N),
    do(A, N, A1, N1),
    loop_entry(N1,A1).
Comment vous attendez-vous main/1 de travail? Les variables N et A ne sont pas instanciés n'importe où, donc write/1 ne finissent par écrit le nom de l'anonyme variable--quelque chose comme _G978. Plus important encore, la coupe de l'opérateur ! ne signifie pas false, et ne fonctionne pas comme un "break" pour N = 0 -> ! ne fonctionne pas pour induire l'échec de test/1.

OriginalL'auteur lllllllllllll | 2014-04-05