home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l210 / 1.ddi / EXAMPLES.ARC / CH15EX02.PRO < prev    next >
Encoding:
Prolog Source  |  1988-06-21  |  3.3 KB  |  132 lines

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