Despartirea in silabe – program PROLOG

Mai jos gasiti programul Turbo Prolog (incomplet) pentru despartirea in silabe a cuvintelor din limba romana, conform regulilor de la:

http://www.limba-romana.net/lectie/Reguli-de-despartire-a-cuvintelor-in-silabe/72/

domains
    listac=char*
predicates
    vocala(char)
    consoana(char)
    string2list(string,listac)
    membru(char,listac)
    afiseaza(listac)
    diftong(char,char)
    hiat(char,char)
    grupexceptie(listac)
    desparte(listac,listac)
    run
clauses
    membru(X,[X|_]) if !.
    membru(X,[_|T]) if membru(X,T).
    vocala('a'). vocala('e'). vocala('i').
    vocala('u'). vocala('o'). vocala('y').
    consoana(X) if not(vocala(X)).
    diftong('a','i').
    diftong('e','a').
    diftong('o','a').
    diftong('y','a').
    diftong('e','u').
    hiat('a','e').
    hiat('a','i').
    hiat('o','e').
    hiat('i','e').
    string2list("",[]) if !.
    string2list(S,[H|T]) if frontchar(S,H,R),string2list(R,T).
    afiseaza([]) if nl, !.
    afiseaza([H|T]) if write(H), afiseaza(T).
    grupexceptie(['l','p','t']).
    grupexceptie(['m','p','t']).
    grupexceptie(['n','c','t']).
    grupexceptie(['n','c','s']).
    grupexceptie(['n','d','v']).
    grupexceptie(['r','c','t']).
    grupexceptie(['r','t','f']).
    grupexceptie(['s','t','m']).
    grupexceptie([C1,C2]) if membru(C1, ['b','c','d','f','g','h','p','t','v']),membru(C2,['l','r']).
    desparte([],[]) if !.
    desparte([X],[X]) if !.
    desparte([X,Y],[X,Y]) if vocala(X), vocala(Y), diftong(X,Y),!.
    desparte([X,Y],[X,'-',Y]) if vocala(X), vocala(Y), hiat(X,Y),!.
    desparte([X,Y],[X,Y]) if vocala(X), consoana(Y),!.
    desparte([X,Y],[X,Y]) if consoana(X), vocala(Y),!.
    desparte([X|T],[X|L]) if consoana(X), desparte(T,L).
    % regula 1 si 1b
    desparte([X,Y,Z|T],[X,'-',Y|L]) if vocala(X), consoana(Y), vocala(Z),desparte([Z|T],L), !.
    % regula 1a
    desparte([X,Y|T],[X|L]) if vocala(X), vocala(Y), diftong(X,Y), desparte([Y|T],L).
    % regula 1c
    % ch etc.
    % regula 2 exceptiile
    desparte([V1,C1,C2,V2|T],[V1,'-',C1,C2|L]) if grupexceptie([C1,C2]), desparte([V2|T],L),!.
    % regula 2
    desparte([V1,C1,C2,V2|T],[V1,C1,'-',C2|L]) if desparte([V2|T],L).
    % regula 3
    % intai exceptiile
    desparte([V1,C1,C2,C3,V2|T],[V1,C1,C2,'-',C3|L]) if grupexceptie([C1,C2,C3]), desparte([V2|T],L),!.
    % apoi regula 
    desparte([V1,C1,C2,C3,V2|T],[V1,C1,'-',C2,C3|L]) if desparte([V2|T],L).
    % regula 4
    desparte([X,Y|T],[X,'-'|L]) if vocala(X), vocala(Y), hiat(X,Y), desparte([Y|T],L).
    run if write("Dati cuvantul: "), readln(Cuvant),
    string2list(Cuvant,Lista), afiseaza(Lista), nl, desparte(Lista,Silabe), afiseaza(Silabe).
goal
    run