How to handle this "multiple loop" in Prolog?

So, basically I am trying to write code Prologsimulating this a few loops:

int foo()
{
   int i, j, m;
   m = 1;
   i = 0;
   for (; i < 5; i++)
   {
      j = 0;
      for (; j < 5; j++)
         m = i + j + m;
   }

   return m;
}

and my Prolog code is as follows:

foo(M02) :-
   M01 is 1,
   I01 is 0,
   loop_entry_1(M01, J01, I01, M02, J02, I02).

loop_entry_1(M01, J01, I01, FinalM, FinalJ, FinalI) :-
   I01 < 5, !,
   J01 is 0,                    %%  I failed here!!
   loop_entry_0(M01, J01, I01, M02, J02, I01),
   I02 is I01 + 1,
   loop_entry_1( M02, J02, I02 , FinalM, FinalJ, FinalI).
loop_entry_1( M01, J01, I01,  M01, J01, I01).

loop_entry_0(M01, J01, I01, FinalM, FinalJ, FinalI) :-
   J01 < 5, !,
   M02 is (I01 + J01) + M01,
   J02 is J01 + 1,
   loop_entry_0(M02, J02, I01 , FinalM, FinalJ, FinalI).
loop_entry_0(M01, J01, I01,  M01, J01, I01). 

Thus, the problem is that every time the execution of exit loop_entry_0, J01was scheduled for 5, and he would fail at J01 is 0.

But I just can't figure out how to deal with this problem ...

Can anyone help me?

+4
source share
1 answer

Prolog. , : , () . "". - : S0, S1, S2, ... S. , "" . , , , , :

p(S0, S) :-
   ...

, , . J01 is 0! , : ! , J01 0.

, , , .

, , , , .

, : , , .

, , foo/1 ( !):

foo(M) :-
   loop_entry_1(1,M, 0,_).

loop_entry_1(M0,M, I0,I) :-
   I0 < 5, !,
   loop_entry_0(M0,M1, 0,_, I0),
   I1 is I0+1,
   loop_entry_1(M1,M, I1,I).
loop_entry_1(M,M, I,I).

loop_entry_0(M0,M, J0,J, I) :-
   J0 < 5, !,
   M1 is I + J0 + M0,
   J1 is J0 + 1,
   loop_entry_0(M1,M, J1,J, I).
loop_entry_0(M,M, J,J, _).

B-but: , . :

foo(M) :-
   loop_entry_1(1,M, 0).

loop_entry_1(M0,M, I0) :-
   I0 < 5, !,
   loop_entry_0(M0,M1, 0, I0),
   I1 is I0+1,
   loop_entry_1(M1,M, I1).
loop_entry_1(M,M, _).

loop_entry_0(M0,M, J0, I) :-
   J0 < 5, !,
   M1 is I + J0 + M0,
   J1 is J0 + 1,
   loop_entry_0(M1,M, J1, I).
loop_entry_0(M,M, _, _). 

, : , ! , (M) !


: 1--1 , .

+3

Source: https://habr.com/ru/post/1542838/


All Articles