% Wenger: verb_flexion(Stamm+,Person+,Numerus+,_stark_schwach,_Tempus,Suffix-).

% Flexionsprogramm bei einem Vollformenlexikon.                    H.Leiss, 29.10.04
%
% Nur Verbflexion: verbflexion_vlex(Stammform+,Formmerkmale+,Vollform-)

% -------- Finite Verbformen: [Pers,Num,Temp,Mod] ----------

form(vfin,[Pers,Num,Temp,Mod]) :-
    person(Pers), numerus(Num), tempus(Temp), modus(Mod).

form(vfin,[Pers,Num,Temp,Mod]) :-
    person(Pers), numerus(Num), tempus(Temp), modus(Mod).

% Fehlt: Einschraenkung bei es-Subjekt, Imperativ im sg und pl.

% --- Definition der Merkmalbereiche der Formmerkmale: [Person,Numerus,Tempus,Modus]

person(1).
person(2).
person(3).

numerus(sg).   % Singular
numerus(pl).   % Plural

tempus(praes). % Praesens
tempus(praet). % Praeteritum

modus(ind).    % Indikativ
modus(konj).   % Konjunktiv

% a) Vollformenlexikon: wort(Stammform+,Formmerkmale+,Vollform-)
%                       wort(Stammform-,Formmerkmale?,Vollform+)

% Schwach konjugiertes Verb:

wort(entdecken,[1,sg,praes,ind],entdecke ).
wort(entdecken,[2,sg,praes,ind],entdeckst).
wort(entdecken,[3,sg,praes,ind],entdeckt ).
wort(entdecken,[3,pl,praes,ind],entdecken).
wort(entdecken,[2,pl,praes,ind],entdeckt ).
wort(entdecken,[3,pl,praes,ind],entdecken).

wort(entdecken,[1,sg,praet,ind],entdeckte  ).
wort(entdecken,[2,sg,praet,ind],entdecktest).
wort(entdecken,[3,sg,praet,ind],entdeckte  ).
wort(entdecken,[3,pl,praet,ind],entdeckten ). 
wort(entdecken,[2,pl,praet,ind],entdecktet ).
wort(entdecken,[3,pl,praet,ind],entdeckten ).

% Stark konjugiertes Verb:

wort(gehen,[1,sg,praes,ind],gehe ).
wort(gehen,[2,sg,praes,ind],gehst).
wort(gehen,[3,sg,praes,ind],geht ).
wort(gehen,[1,pl,praes,ind],gehen).
wort(gehen,[2,pl,praes,ind],geht ).
wort(gehen,[3,pl,praes,ind],gehen).

wort(gehen,[1,sg,praet,ind],ging  ).
wort(gehen,[2,sg,praet,ind],gingst).
wort(gehen,[3,sg,praet,ind],ging  ).
wort(gehen,[1,pl,praet,ind],gingen).
wort(gehen,[2,pl,praet,ind],gingt ).
wort(gehen,[3,pl,praet,ind],gingen).

wort(_,[_,_,_,konj],_) :-
    write(user,'Finite Verbformen im Konjunktiv sind nicht definiert.\n'), fail.

% Flexionsprogramm: verbflexion_vlex(Stammform+,Formmerkmale+,Vollform-)

verbflexion_vlex(Stammform,Formmerkmale,Vollform) :-
    wort(Stammform,Formmerkmale,Vollform).

% Flexionsprogramm: verbflexion_vlex(Stammform+)

verbflexion_vlex(Stammform) :-   % Stammform = Infinitiv
    form(vfin,Formmerkmale),
    wort(Stammform,Formmerkmale,Vollform),
    write(Formmerkmale),write(': '),write(Vollform),nl,
    fail.                        % weitere Formmerkmale und Vollformen suchen
verbflexion_vlex(_).             % fertig.

% Weitere Unterscheidungen: - Perfektbildung mit haben oder mit sein?
%                           - Abtrennung eines Praefixes? umfuhr vs. fuhr-um; umfahren vs. um-ge-fahren
%                           - Umlautung: schwach,(e,a,a): brennen, brannte gebrannt

% Abfragebeispiel: ?- verbflexion_vlex(gehen,[1,pl,Tempus,ind],Vollform).

