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

  1. /*
  2.    Turbo Prolog 2.0 Chapter 18, Example Program 6
  3.    
  4.    Copyright (c) 1986, 88 by Borland International, Inc
  5. */   
  6.  
  7. domains
  8.     letter = char
  9.     word = letter*
  10.  
  11. predicates
  12.     divide(word, word, word, word)
  13.     vocal(letter)
  14.     consonant(letter)
  15.     string_word(string, word)
  16.     append(word, word, word)
  17.     repeat
  18.  
  19. goal
  20.     clearwindow,
  21.     repeat,
  22.     write("Write a multi-syllable word: "),
  23.     readln(S),
  24.     string_word(S, Word),
  25.     divide([], Word, Part1, Part2),
  26.     string_word(Syllable1, Part1),
  27.     string_word(Syllable2, Part2),
  28.     write("Division: ",Syllable1,"-",Syllable2),nl,
  29.     fail.
  30.  
  31. clauses
  32.     divide(Start, [T1, T2, T3|Rest], D1, [T2, T3|Rest]):-
  33.         vocal(T1), consonant(T2), vocal(T3),
  34.         append(Start, [T1], D1).
  35.     divide(Start, [T1, T2, T3, T4|Rest], D1,[T3, T4|Rest]):-
  36.         vocal(T1), consonant(T2), consonant(T3), vocal(T4),
  37.         append(Start, [T1, T2], D1).
  38.     divide(Start, [T1|Rest], D1, D2):-
  39.         append(Start, [T1], S),
  40.         divide(S, Rest, D1, D2).
  41.  
  42.     vocal('a').vocal('e').vocal('i').
  43.     vocal('o').vocal('u').vocal('y').
  44.  
  45.     consonant(B):-
  46.         not(vocal(B)), B <= 'z', 'a' <= B.
  47.  
  48.     string_word("", []):-!.
  49.     string_word(Str, [H|T]):-
  50.         bound(Str), frontchar(Str, H, S), string_word(S, T).
  51.     string_word(Str, [H|T]):-
  52.         free(Str), bound(H), string_word(S, T),
  53.         frontchar(Str,H,S).
  54.  
  55.     append([], L, L):-!.
  56.     append([X|L1], L2, [X|L3]) :-
  57.         append(L1, L2, L3).
  58.  
  59.     repeat.
  60.     repeat :- repeat.
  61.     
  62.     
  63.     
  64.     
  65.     
  66.     
  67.     
  68.