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

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