fragen :-
    write('Beende die Frage mit <Punkt><Return>'),
    nl,read_sentence(user,Sentence,[]),
    tokenize(Sentence,Atomlist),
    Startsymbol = s([qu],[_Temp,ind,Vst]), 
    addTree:translate1(Startsymbol,Term,Baum),
    addDifflists:translate(Term,ExpTerm,Atomlist,[]),
    nl,write('Aufruf: '), portray_clause(ExpTerm),
    (call(ExpTerm) ->
        (sem(Baum,LamTerm) -> 
            (Vst = ve ->
                beantworte(LamTerm,Wert)
            ; antworten(LamTerm,Wert)),
            (antwortbaum(Baum,Wert,Antwort)
            -> blaetter(Antwort,Blaetter),
                concat_atom(Blaetter,' ',Atom),
                nl,writef('Antwort: %w.',[Atom])
            ; nl,writef('Antwort: %w',[Wert]),
                write('\nDie Antwort kann noch nicht \
                     in natürlicher Sprache \
                     formuliert werden.\n')
            )
        ; write('\nDie Frage kann leider noch nicht \
               in eine Formel umgewandelt werden.'),
            nl,nl,write('Baum:   '), writeq(Baum)
        )
    ; 
        nl, write('\nDie Eingabe wurde \
                 syntaktisch nicht erkannt.\n')
    ).
% blaetter(+Baum,-Liste der Blaetter).

blaetter([],[]).
blaetter([Wurzel|Teilbaeume],Blaetter) :-
    blaetter([Wurzel|Teilbaeume],[],
             GespiegelteBlaetter),
    reverse(GespiegelteBlaetter,Blaetter).

blaetter([Wurzel],Korb,Blaetter) :-
    % [Wurzel] besteht aus einem Blatt (Atom)
     Blaetter = [Wurzel|Korb].
blaetter([_Wurzel,Baum],Korb,Blaetter) :-
    blaetter(Baum,Korb,Blaetter).
blaetter([Wurzel,Baum,Baum2|Baueme],Korb,Blaetter) :-
    blaetter(Baum,Korb,GrosserKorb),
    blaetter([Wurzel,Baum2|Baueme],
             GrosserKorb,Blaetter).

% ----- Beantwortung von Ja/Nein-Fragen: ------
antwortbaum(Frage,ja,Antwort) :-
    !, Frage = [s([qu],[Temp,Mod,ve])|_],
    ve>>vz(Frage,Antwort1),
    Antwort = [s([def],[Temp,Mod,vz]),
               [adv,'Ja,'],Antwort1].

antwortbaum(Frage,nein,Antwort) :-
    !, Frage = [s([qu],[Temp,Mod,ve]) |_],
    ve>>vl(Frage,Antwort1),
    Antwort = [s([def],[Temp,Mod,vz]),
               [adv,'Nein, es ist nicht \
                     der Fall, daß'], 
               Antwort1].

ve>>vz([s([qu],[Temp,Mod,ve]),TV,Obj1,Obj2],
       [s([def],[Temp,Mod,vz]),Obj1,TV,Obj2]) :-
    ( TV = [v([nom,akk],_),_V]
    ; TV = [v([sein],[3,sg,Temp,Mod]),_V]).

ve>>vl([s([qu],[Temp,Mod,ve]),TV,Obj1,Obj2],
       [s([def],[Temp,Mod,vl]),Obj1,Obj2,TV]) :-
    ( TV = [v([nom,akk],_),_V]
    ; TV = [v([sein], [3,sg,Temp,Mod]),_V]).

% --- Beantwortung von W-Fragen (W im Vorfeld) ---

antwortbaum(Frage,Namen,Antwort) :-
    Frage = [s([qu],[Temp,Mod,vz]),
             [np([qu,3,Gen],[Num,Kas])|_] | Rest],
    antwortbaum([np([qu,3,Gen],[Num,Kas])|_],
                Namen,NP),
    Antwort = [s([def],[Temp,Mod,vz]),NP | Rest].

antwortbaum([np([qu,3,Gen],[sg,Kas]),
             [pron([qu],_)|_]],[N1,N2,N3|Ns],Baum) :-
    !, antwortbaum([np([qu,3,_Gen1],[sg,Kas]),
                    [pron([qu],_)|_]],[N1],Baum1),
    antwortbaum([np([qu,3,Gen],[sg,Kas]),
                 [pron([qu],_)|_]],[N2,N3|Ns],Baum2),
    Baum = [np([def,3,Gen],[pl,Kas]), % Numerus!
            Baum1,[conj,','],Baum2].  % Komma

antwortbaum([np([qu,3,Gen],[sg,Kas]),
             [pron([qu],_)|_]],[N1,N2],NpBaum) :-
    !, antwortbaum([np([qu,3,_Gen1],[sg,Kas]),
                    [pron([qu],_)|_]],[N1],NP1),
    antwortbaum([np([qu,3,_Gen2],[sg,Kas]),
                 [pron([qu],_)|_]],[N2],NP2),
    NpBaum = [np([def,3,Gen],[pl,Kas]),
              NP1,[conj,und],NP2].    % Konjunktion

antwortbaum([np([qu,3,_Gen],[sg,Kas]),
             [pron([qu],_)|_]],[Name],Baum) :-
    großschreibung(Name,GrossName),
    np([def,3,_Gen1],[sg,Kas],
       Baum,[GrossName],[]). % Parser aufrufen!

großschreibung(Wort,Gross) :-
    atom(Wort),
    name(Wort,[C|Chars]),
    (member(C,"abcdefghijklmnopqrstuvwxyzäöü")
    ->  K is C-32,           
        name(Gross,[K|Chars])
    ; Gross = Wort).

antwortbaum([np([qu,3,Gen],[sg,Kas]),
             [pron([qu],_)|_]],[],Baum) :-
    (Kas = nom,
        (Gen = mask, Kein = 'Keiner'
        ; Gen = fem, Kein = 'Keine')
    ; Kas = akk,
        (Gen = mask, Kein = 'Keinen'
        ; Gen = fem, Kein = 'Keine')
    ),    
    Baum = [np([def,3,Gen],[sg,Kas]),
            [det([nindef],[Gen,sg,Kas]),Kein]].

antwortbaum([np([qu,3,Gen],[pl,Kas]),
             [pron([qu],_)|_]],Namen,Baum) :-
    antwortbaum([np([qu,3,Gen],[sg,Kas]),
                 [pron([qu],_)|_]],Namen,Baum).

