1

Тема: Примеры программ на PROLOG

predicates
решение(real,real,real)
clauses   


решение(S,N,X):-
X<=2*N+1,
Y=S+1/(X*X),
Z=X+2,
решение(Y,N,Z).

решение(S,N,X):-
X>2*N+1,
write("Ответ: ",S," ").
goal
N=3,
S=0,
X=3,
решение(S,N,X).

Поделиться

2

Re: Примеры программ на PROLOG

predicates
решение(real,real)
clauses   


решение(Y,X):-
X<=2,
A=Y+sin(X),
B=X+1/10,
решение(A,B).

решение(Y,X):-
X>2,
write("Ответ: ",Y," ").
goal
Y=0,
X=1,
решение(Y,X).

Поделиться

3

Re: Примеры программ на PROLOG

predicates
    f(real, real)
    f(real, real, real, real)
    pow(integer, integer, integer)
   
clauses
    pow(X, Y, M) :- M=exp(Y*ln(X)).
   
    f(N, FN) :- f(N, FN, 1, 2).
    f(N, FN, N, FN) :- !.
    f(N, FN, I, P) :-
        NewI = I+1,
        pow(2, NewI, M),
        NewP = P+M,
        f(N, FN, NewI, NewP).

goal
    X=2, f(X, FX).

Поделиться

4

Re: Примеры программ на PROLOG

predicates
    f(real, real)
    pow(integer, integer, integer)
   
clauses
    pow(X, Y, M) :- M=exp(Y*ln(X)).
   
    f(1, 2) :- !.

    f(X, FX) :-
        Y = X-1,
        f(Y, FY),
        pow(2, X, M),
        FX = M+FY.

goal
    X=4, f(X, FX).

Поделиться

5

Re: Примеры программ на PROLOG

predicates
    f(real, real)
    f(real, real, real, real)
   
clauses
    f(N, FN) :- f(N, FN, 1, 0.5).
    f(N, FN, N, FN) :- !.
    f(N, FN, I, P) :-
        NewI = I+1,
        NewP = P*(1-(1/(NewI*2))),
        f(N, FN, NewI, NewP).

goal
    X=10, f(X, FX).

Поделиться

6

Re: Примеры программ на PROLOG

predicates
    f(real, real)
   
clauses
    f(1, 0.5) :- !.
   
    f(X, FX) :-
        Y = X-1,
        f(Y, FY),
        FX = (1-(1/(X*2)))*FY.

goal
    X=10, f(X, FX).

Поделиться

7

Re: Примеры программ на PROLOG

Поделиться

8

Re: Примеры программ на PROLOG

domains
     treetype = tree (string, treetype, treetype); empty ()

    predicates
     max(integer, integer, integer)
     print_all_elements (treetype, integer, integer)
    
    clauses
   
    max(X, Y, X) :- X>Y, !.
    max(X, Y, Y) :- Y>X, !.
   
     print_all_elements (empty, N, MAX):- max(N, MAX, M), M>MAX, write(M), nl, !.

     print_all_elements (tree (X, Y, Z), N, M):-
         write (X), nl, N1 = N + 1,
          print_all_elements (Y, N1, M),
          print_all_elements (Z, N1, M).

goal
        print_all_elements  (tree ("Катя",   
                            tree ("Миша", 
                                tree ("Вова", empty, empty), 
                                tree ("Лида",
                                    tree ("Маша", empty, empty),
                                    tree ("Дуся",
                                        tree ("Ира", empty, empty),
                                        tree ("Вася", empty, empty)))),
                            tree ("Люда",
                                tree ("Зина", empty, empty),
                                tree ("Петя", empty, empty))), 0, 0).

Поделиться

9

Re: Примеры программ на PROLOG

domains
    treetype = tree(string, treetype, treetype); empty()
   
predicates
    pp(treetype, integer)
    po(treetype)

clauses   

    po(empty).
    po(tree(X, _, _)) :- write(X), nl, !.
   
    pp(empty, _).
    pp(tree(X, _, _), 0) :- write(X).
    pp(tree(_, Y, Z), N) :- N1 = N+1, po(Y), po(Z), pp(Y, N1), pp(Z, N1).
       
goal
    pp(tree("Katia",
        tree("Misha",
            tree("Vova", empty, empty),
            tree("Lida", empty, empty)),
         tree("Liuda",
                 tree("Zina", empty, empty),
                 tree("Petia", empty, empty))),
     0), nl, fail; true.

Поделиться

10

Re: Примеры программ на PROLOG

domains
    treetype = tree(string, treetype, treetype); empty()
    argument=real
    result=real
predicates
    pp(treetype, integer)
    print(treetype)
    prob(integer)
       
clauses   

    prob(0):-!.
    prob(N):-write("    "),N1=N-1, prob(N1).
    print(empty).
    print(tree(X, _, _)) :- write(X), nl, !.
   
    pp(empty, _).
        pp(tree(X, _, _), 0) :- write(X),write("\n").
    pp(tree(_, Y, Z), N) :- N1 = N+1, prob(N),print(Y),prob(N),print(Z),pp(Y, N1),pp(Z, N1).
       
goal
    pp(tree("Anna(0)",
        tree("Victor(1)",
            tree("Alexandr(2)", empty, empty),
            tree("Joneya(2)", empty, empty)),
        
         tree("Luda(1)",
                 tree("Vic(2)", empty, empty),
                 tree("vicki(2)", empty, empty))),
     0), nl, fail; true.

Поделиться

11

Re: Примеры программ на PROLOG

/* Обход дерева "сначала вглубь" и печать каждого элемента, который попадается на пути. */

domains
     treetype = tree (string, treetype, treetype); end()
predicates
    writetree (treetype)
clauses
     writetree (end).
     writetree (tree (X, Y, Z)):-
       write (X),
       writetree (Y),
       writetree (Z) ,T=+1, write(T).

goal
      writetree  (tree ("Катя",   
                                tree ("Миша", 
                                      tree ("Вова", end, end), 
                                        tree ("Лида", end, end)),
                                tree ("Люда",
                                tree ("Зина", end, end), 
                                         tree ("Петя", end, end)))),nl,fail;true.

Поделиться

12

Re: Примеры программ на PROLOG

/* Простые процедуры построения дерева            
    create_tree (A, B) помещает A в поле данных одноузлового
              дерева B                
     insert_left (A, B, C) вставляет A как левое поддерево B
                и присваивает результат C    
     insert_right (A, B, C) вставляет A как правое поддерево
                B и присваивает результат C */

    domains
     treetype = tree (string, treetype, treetype); empty ()

    predicates
     create_tree (string, treetype)
     insert_left (treetype, treetype, treetype)
     insert_right (treetype, treetype, treetype)
    run

    clauses
     create_tree (A, tree (A, empty, empty)).
     insert_left (X, tree (A, _, B), tree (A, X, B)).
     insert_right (X, tree (A, B, _), tree (A, B, X)).

    run:-
     /* Сначала создадим несколько одноузловых деревьев*/

     create_tree ("Вова", V),
     create_tree ("Лида", Ld),
     create_tree ("Миша", M),
     create_tree ("Зина", Z),
     create_tree ("Петя", P),
     create_tree ("Люда", L),
     create_tree ("Катя", K),

     /*...затем соединим их... */

     insert_left (V, M, M2),
     insert_right (Ld, M2, M3),
     insert_left (Z, L, L2),
     insert_right (P, L2, L3),
     insert_left (M3, K, K2),
     insert_right (L3, K2, K3),

     /*...и печатаем результат. */

     write (K3, '\n').

goal
    run.

Поделиться

13

Re: Примеры программ на PROLOG

/*

*/

predicates
    sum(integer,real)
    member(integer,real)
    sum(real,real,real,real)
clauses
    member(Y,R):-A=2*Y,B=A+1,R=A/B.
    sum(N,R):-sum(N,R,N,1).
    sum(N,R,0,R):-!.
    sum(N,R,L,P):-member(L,R1),
    L1=L-1,
    P1=P*R1,
    sum(N,R,L1,P1).   
                       
goal
    sum(2,R1).

Поделиться

14

Re: Примеры программ на PROLOG

predicates
    f(real, real)
   
clauses
    f(1, 0.5) :- !.
   
    f(X, FX) :-
        Y = X-1,
        f(Y, FY),
        FX = (1-(1/(X*2)))*FY.

goal
    X=10, f(X, FX).

Поделиться

15

Re: Примеры программ на PROLOG

predicates
  factorial(interger, real)
  rez(integer)
clauses 
  factorial(1, 1) :- !.
  factorial(X, FactX) :-
      Y = X-1,
      factorial (Y, FactY),
      FactX = X*FactY*2.
  rez(ZZ):-factorial(ZZ,FactX),
           A=FactX*2,
           write("Result",A),nl.
goal
  rez(4).

Поделиться

16

Re: Примеры программ на PROLOG

Поделиться

17

Re: Примеры программ на PROLOG

predicates
    r(long)
    %r(unsigned, long,unsigned, long)
    do
clauses
    %r(N, NewPr):- r(N, NewPr,1,1).
    %r(N, NewPr,N, NewPr):- !.
    r(X):- X>100,write("\nNO\n"),!.
    r(X):- X=81,write("\nYES\n"),!.
    r(X):- NewX=X*X,%write(NewX),
    r(NewX).

    do:-write("Ввведите "), readint(X),   r(X). %write("Сумма=", Pr,"\n").
goal
    do.

Поделиться

18

Re: Примеры программ на PROLOG

Поделиться

19

Re: Примеры программ на PROLOG

predicates
    sum(integer,real)
    member(integer,real)
    sum(real,real,real,real)
clauses
    member(Y,R):-A=2*Y,B=A+1,R=A/B.
    sum(N,R):-sum(N,R,N,1).
    sum(N,R,0,R):-!.
    sum(N,R,L,P):-member(L,R1),
    L1=L-1,
    P1=P*R1,
    sum(N,R,L1,P1).   
                       
goal
    sum(2,R1).

Поделиться

20

Re: Примеры программ на PROLOG

predicates
    sum(integer,real)
    cosinus(integer,real)
    sum(real,real,real,real)
clauses
    cosinus(Y,R):-A=ln(1),B=Y*A,St=exp(B),R=cos(St).
    sum(N,R):-sum(N,R,1,0).
    sum(N,R,N,R):-!.
    sum(N,R,L,P):-cosinus(L,R1),L1=L+1,
    P1=P+R1,
    sum(N,R,L1,P1).   
                       
goal
    sum(5,R1).

Поделиться