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

  1. /*
  2.    Turbo Prolog 2.0 Chapter 14, Example Program 3
  3.    
  4.    Copyright (c) 1986, 88 by Borland International, Inc
  5.    
  6. */
  7.    
  8. domains
  9.    list   = symbol*
  10.    scores = integer
  11.  
  12. predicates
  13.    member(symbol, list)
  14.    run
  15.    continue(list, scores)
  16.    yes_no_count(symbol, list)
  17.    guessword(scores, list)
  18.    word(list, integer)
  19.    read_as_list(list, integer)
  20.  
  21. goal
  22.    makewindow(1, 7, 0, "", 0, 0, 25, 80),
  23.    makewindow(2, 7, 135, "Counting", 1, 20, 4, 34),
  24.    makewindow(3, 112, 112, "YES", 5, 5, 7, 30),
  25.    makewindow(4, 112, 112, "NO", 5, 40, 7, 30),
  26.    makewindow(5, 7, 7, "", 14, 20, 10, 34),
  27.    run.
  28.  
  29. clauses
  30.    run :- word(W, L),
  31.       shiftwindow(1), clearwindow,
  32.       write("The word has ", L, " letters"),
  33.       shiftwindow(2), clearwindow,
  34.       shiftwindow(3), clearwindow,
  35.       shiftwindow(4), continue(W, 0), fail.
  36.  
  37.    continue(L, R) :-
  38.       shiftwindow(5), clearwindow,
  39.       write("Guess a letter :"),
  40.       Total=R+1, readln(T), yes_no_count(T, L),
  41.       shiftwindow(5), clearwindow,
  42.       guessword(Total, L), continue(L, Total).
  43.  
  44.    yes_no_count(X, List) :-
  45.       member(X, List), shiftwindow(3), write(X),
  46.       shiftwindow(2), write(X), !.
  47.  
  48.    yes_no_count(X, _) :-
  49.       shiftwindow(4), write(X),
  50.       shiftwindow(2), write(X).
  51.  
  52.    guessword(Count, Word) :-
  53.       write("Know the word yet? Press y or n"),
  54.       readchar(A), A='y', cursor(0, 0),
  55.       write("Type it in one letter per line \n"),
  56.       word(Word, L), read_as_list(G, L),
  57.       G=Word, clearwindow, window_attr(112),
  58.       write("Right! You used ", Count, " guess(es)"),
  59.       readchar(_), window_attr(7), !, fail.
  60.  
  61.    guessword(_, _).
  62.  
  63.    word([b, i, r, d], 4).
  64.    word([p, r, o, l, o, g], 6).
  65.    word([f, u, t, u, r, e], 6).
  66.    word([a, r, t, i, f, i, c, i, a, l], 10).
  67.    word([p, o, w, e, r, f, u, l], 8).
  68.    word([e, l, e, g, a, n, t], 7).
  69.  
  70.    member(X, [X|_]) :- !.
  71.    member(X, [_|T]) :- member(X, T).
  72.  
  73.    read_as_list([], 0) :- !.
  74.    read_as_list([Ch|Rest], L) :- readln(Ch), L1=L-1,
  75.        read_as_list(Rest, L1).
  76.