Sourse Code for Dividing Words into Syllables


DOMAINS
	letter = char
	word_ = letter*

PREDICATES
	nondeterm divide(word_,word_,word_,word_)
	vocal(letter)
	consonant(letter)
	nondeterm string_word(string,word_)
	append(word_,word_,word_)
	nondeterm repeat
        quit(string)
CLAUSES
  divide(Start,[T1,T2,T3|Rest],D1,[T2,T3|Rest]):-
	vocal(T1),
	consonant(T2),
	vocal(T3),
        append(Start,[T1],D1).
  divide(Start,[T1,T2,T3,T4|Rest],D1,[T3,T4|Rest]):-
	vocal(T1),
	consonant(T2),
	consonant(T3),
	vocal(T4),
        append(Start,[T1,T2],D1).
  divide(Start,[T1|Rest],D1,D2):-
	append(Start,[T1],S),
	divide(S,Rest,D1,D2).

  vocal('a').
  vocal('e').
  vocal('i').
  vocal('o').
  vocal('u').
  vocal('y').

  consonant(B):-
	not(vocal(B)),
	B <= 'z',
	'a' <= B.

  string_word("",[]):-!.
  string_word(Str,[H|T]):-
	bound(Str),
	frontchar(Str,H,S),
	string_word(S,T).
  string_word(Str,[H|T]):-
	free(Str),
	bound(H),
	string_word(S,T),
	frontchar(Str,H,S).

  append([],L,L):-!.
  append([X|L1],L2,[X|L3]):-
	append(L1,L2,L3).

  repeat.
  repeat:-repeat.

  quit(""):-exit,!.
  quit(_).

GOAL
	repeat,
	write("Write a multi-syllable word: "),
	readln(S),nl,
	quit(S),
	string_word(S,Word),
	divide([],Word,Part1,Part2),
	string_word(Syllable1,Part1),
	string_word(Syllable2,Part2),
	write("Division: ",Syllable1,"-",Syllable2),nl,
	fail.