Server Notice:

hide

Public Pad Latest text of pad 0XO7ZIL6ip Saved Jan 13, 2020

 
 
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).