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

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