home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l217 / 2.ddi / EXAMPLES / CH15EX02.PRO < prev    next >
Encoding:
Prolog Source  |  1990-03-26  |  3.2 KB  |  129 lines

  1. /*
  2.    Copyright (c) 1986, 90 by Prolog Development Center
  3. */
  4.     
  5. domains
  6.    my_dom = f(string)
  7.    db_selector = my_dba
  8.  
  9. predicates
  10.    write_dba(integer)
  11.    read_dba
  12.    rd(Ref)
  13.    count_dba(integer)
  14.    count(Ref, integer, integer)
  15.    replace_dba
  16.    replace(Ref)
  17.    double_dba
  18.    double(Ref)
  19.    half_dba
  20.    half(Ref)
  21.    mixture
  22.  
  23. clauses
  24.    write_dba(0) :- !.
  25.    write_dba(N) :-
  26.       chain_inserta(my_dba, my_chain, my_dom, f("Prolog system"), _),
  27.       chain_insertz(my_dba, my_chain, my_dom, f("Prolog Compiler"), _),
  28.       N1=N-1,
  29.       write_dba(N1).
  30.  
  31.    read_dba :-
  32.       db_chains(my_dba, Chain),
  33.       chain_terms(my_dba, Chain, my_dom, Term, Ref),
  34.       write("\nRef=", Ref, ", Term=", Term),
  35.       fail.
  36.    read_dba :-
  37.       db_chains(my_dba, Chain),
  38.       chain_first(my_dba, Chain, Ref),
  39.       rd(Ref),
  40.       fail.
  41.    read_dba.
  42.  
  43.    rd(Ref) :-
  44.       ref_term(my_dba, my_dom, Ref, Term), nl, write(Term), fail.
  45.    rd(Ref) :-
  46.       chain_next(my_dba, Ref, Next), !, rd(Next).
  47.    rd(_).
  48.  
  49.    replace_dba :-
  50.       chain_first(my_dba, my_chain, Ref),
  51.       replace(Ref).
  52.  
  53.    replace(Ref) :-
  54.       term_replace(my_dba, my_dom, Ref, f("Prolog Toolbox")),
  55.       chain_next(my_dba, Ref, NN),
  56.       chain_next(my_dba, NN, Next), !,
  57.       replace(Next).
  58.    replace(_).
  59.  
  60.    half_dba :-
  61.       chain_last(my_dba, my_chain, Ref),
  62.       half(Ref).
  63.  
  64.    half(Ref) :-
  65.       chain_prev(my_dba, Ref, PP),
  66.       chain_prev(my_dba, PP, Prev), !,
  67.       term_delete(my_dba, my_chain, Ref),
  68.       half(Prev).
  69.    half(_).
  70.  
  71.    double_dba :-
  72.       chain_first(my_dba, my_chain, Ref),
  73.       double(Ref).
  74.  
  75.    double(Ref) :-
  76.       chain_next(my_dba, Ref, Next), !,
  77.       chain_insertafter(my_dba, my_chain, my_dom, Ref,f("Programmers Guide"), _),
  78.       double(Next).
  79.    double(_).
  80.  
  81.    count_dba(N) :-
  82.       chain_first(my_dba, my_chain, Ref),
  83.       count(Ref, 1, N).
  84.  
  85.    count(Ref, N, N2) :-
  86.       chain_next(my_dba, Ref, Next), !,
  87.       N1=N+1,
  88.       count(Next, N1, N2).
  89.    count(_, N, N).
  90.  
  91.    mixture :-
  92.       write("\nReplace every second term:"),
  93.       replace_dba,
  94.       write("\nDouble the number of terms:"),
  95.       double_dba,
  96.       write("\nErase every second term:"),
  97.       half_dba,
  98.       write("\nUse ref_term for all terms:"),
  99.       read_dba,
  100.       count_dba(N),
  101.       write("\nThere are now ", N, " terms in the database"),
  102.       db_statistics(my_dba, NoOfTerms, MemSize, DbaSize, FreSize),
  103.       writef("\nNoOfTerms=%, MemSize=%, DbaSize=%, FreeSize=%", NoOfTerms, MemSize,DbaSize,FreSize).
  104.  
  105. goal
  106.    write("\n\n\n\tTEST OF DATABASE SYSTEM\n\t***********************\n\n"),
  107.    time(H1, M1, S1, D1),
  108.    db_create(my_dba, "dd.dat", in_memory),
  109.    write("\n\nWrite some terms in the database:"),
  110.    write_dba(50),
  111.    read_dba,
  112.    mixture,
  113.  
  114.    write("\n\n\nCopy to file"),
  115.    db_copy(my_dba, "dd.dat", in_file),
  116.    db_close(my_dba),  db_delete("dd.dat", in_memory),
  117.    db_open(my_dba, "dd.dat", in_file),
  118.    mixture,
  119.    db_close(my_dba),
  120.  
  121.    write("\n\n\nOpen the database on file"),
  122.    db_open(my_dba, "dd.dat", in_file),
  123.    mixture,
  124.    db_close(my_dba),
  125.  
  126.    time(H2, M2, S2, D2),
  127.    Time = (D2-D1)+100.0*((S2-S1)+60.0*((M2-M1)+ 60.0*(H2-H1))),
  128.    write("\n\nTime = ", Time, "/100 Sec" ), nl.
  129.