doodle für BN Test: https://doodle.com/poll/2gabhsakzn3xs79g
 
Musterlösung aus der heutigen Sitzung


pred([_|T1],[a|T2]):-
   pred(T1,T2).
   
pred([],[]).

Musterlösung:
pred(L1,L2) gelingt genau dann wenn L1 eine Liste belieber Länge ist und L2 ist eine Liste,
die genauso lang ist wie L1 und nur aus a's besteht.
Beispiel: pred([1,d,5,b],[a,a,a,a]).


pred([H|T1],[a,H|T2]):-
   pred(T1,T2).

pred([],[a]).

Musterlösung: pred(L1,L2) gelingt genau dann wenn L1 eine Liste beliebiger Länge ist und wenn L2
eine Liste ungerader Länge ist, die mit a beginnt und auf a endet und
an den geraden Positionen genau die Elemente aus L1 in derselben Reihenfolge hat und auf
den ungeraden Positionen a's.

Beispiele: pred([1,d,3], [a,1,a,d,a,3,a])  , pred([],[a]) , pred([t],[a,t,a])


pred([H|T],S):-
   pred(T,H,S).

pred(H|T],Acc,S):-
   NewAcc is Acc+H,
   pred(T,NewAcc,S).

pred([],S,S).

pred(L,S) gelingt genau dann, wenn L eine Liste beliebiger
Länge von Zahlen ist und S die Summe dieser Zahlen ist.












%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% trainFromTo/2                                                          %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

directTrain(saarbruecken,dudweiler).
directTrain(forbach,saarbruecken).
directTrain(freyming,forbach).
directTrain(stAvold,freyming).
directTrain(fahlquemont,stAvold).
directTrain(metz,fahlquemont).
directTrain(nancy,metz).


% That is, this knowledge base holds facts about towns it is possible to travel
% between by taking a direct train. But of course, we can travel further by
% chaining together direct train journeys. Write a recursive predicate
% travelFromTo/2 that tells us when we can travel by train between two towns.
% For example, when given the query
% travelFromTo(nancy,saarbruecken).
% it should reply yes.

% Basisfall: Es gibt einen direkten Zug zwischen Start und Ziel.
travelFromTo(Start,Ziel) :- 
    directTrain(Start,Ziel).
% rekursive Regel: Es gibt einen direkten Zug vom Start zum Zwischenstopp.
% rekursiver Aufruf: dann kann man vom Zwischenstopp zum Ziel reisen. Das kann ueber 
% einen direkten Zug passieren (es wird erst die Basisklausel versucht)
% oder ueber nochmaliges Umsteigen (weiteres Aufrufen der rekursiven Klausel)
travelFromTo(Start,Ziel) :- 
    directTrain(Start,Zwischenstopp),
    travelFromTo(Zwischenstopp,Ziel).