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.