2014-02-01 15:32:13 +01:00
|
|
|
\chapter{Prolog}
|
|
|
|
\index{Prolog|(}
|
2014-02-01 19:44:40 +01:00
|
|
|
|
|
|
|
Prolog ist eine Programmiersprache, die das logische Programmierparadigma
|
|
|
|
befolgt.
|
|
|
|
|
|
|
|
Eine interaktive Prolog-Sitzung startet man mit \texttt{swipl}.
|
|
|
|
|
|
|
|
In Prolog definiert man Terme.
|
2014-02-24 11:44:57 +01:00
|
|
|
\section{Erste Schritte}
|
|
|
|
\subsection{Hello World}
|
|
|
|
Speichere folgenden Quelltext als \texttt{hello-world.pl}:
|
2014-03-09 16:38:27 +01:00
|
|
|
\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=hello-world.hs]{prolog}{scripts/prolog/hello-world.pl}
|
2014-02-24 11:44:57 +01:00
|
|
|
|
|
|
|
Kompiliere ihn mit \texttt{gplc hello-world.pl}. Es wird eine
|
|
|
|
ausführbare Datei erzeugt.
|
|
|
|
|
2014-02-01 15:32:13 +01:00
|
|
|
\section{Syntax}
|
|
|
|
\section{Beispiele}
|
2014-02-01 20:14:08 +01:00
|
|
|
\subsection{Humans}
|
|
|
|
Erstelle folgende Datei:
|
|
|
|
\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=human.pro]{prolog}{scripts/prolog/human.pro}
|
|
|
|
|
|
|
|
Kompiliere diese mit
|
|
|
|
\inputminted[numbersep=5pt, tabsize=4]{bash}{scripts/prolog/human.sh}
|
|
|
|
|
|
|
|
Dabei wird eine \texttt{a.out} Datei erzeugt, die man wie folgt
|
|
|
|
nutzen kann:
|
|
|
|
\inputminted[numbersep=5pt, tabsize=4]{bash}{scripts/prolog/human-2.sh}
|
|
|
|
|
2014-03-09 19:06:23 +01:00
|
|
|
\subsection{Splits}
|
|
|
|
\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=splits.pl]{prolog}{scripts/prolog/splits.pl}
|
|
|
|
|
|
|
|
Dieses skript soll man \texttt{swipl -f test.pl} aufrufen. Dann erhält man:
|
|
|
|
|
|
|
|
\inputminted[numbersep=5pt, tabsize=4]{prolog}{scripts/prolog/splits.sh}
|
|
|
|
|
2014-03-11 13:58:42 +01:00
|
|
|
\subsection{Delete}
|
|
|
|
\inputminted[numbersep=5pt, tabsize=4]{prolog}{scripts/prolog/delete.pl}
|
|
|
|
|
2014-02-01 19:44:40 +01:00
|
|
|
\subsection{Zebrarätsel}
|
|
|
|
Folgendes Rätsel wurde von \url{https://de.wikipedia.org/w/index.php?title=Zebrar%C3%A4tsel&oldid=126585006}
|
|
|
|
entnommen:
|
2014-02-01 15:32:13 +01:00
|
|
|
|
2014-02-01 19:44:40 +01:00
|
|
|
\begin{enumerate}
|
|
|
|
\item Es gibt fünf Häuser.
|
|
|
|
\item Der Engländer wohnt im roten Haus.
|
|
|
|
\item Der Spanier hat einen Hund.
|
|
|
|
\item Kaffee wird im grünen Haus getrunken.
|
|
|
|
\item Der Ukrainer trinkt Tee.
|
|
|
|
\item Das grüne Haus ist direkt rechts vom weißen Haus.
|
|
|
|
\item Der Raucher von Altem-Gold-Zigaretten hält Schnecken als Haustiere.
|
|
|
|
\item Die Zigaretten der Marke Kools werden im gelben Haus geraucht.
|
|
|
|
\item Milch wird im mittleren Haus getrunken.
|
|
|
|
\item Der Norweger wohnt im ersten Haus.
|
|
|
|
\item Der Mann, der Chesterfields raucht, wohnt neben dem Mann mit dem Fuchs.
|
|
|
|
\item Die Marke Kools wird geraucht im Haus neben dem Haus mit dem Pferd.
|
|
|
|
\item Der Lucky-Strike-Raucher trinkt am liebsten Orangensaft.
|
|
|
|
\item Der Japaner raucht Zigaretten der Marke Parliaments.
|
|
|
|
\item Der Norweger wohnt neben dem blauen Haus.
|
|
|
|
\end{enumerate}
|
2014-02-01 15:32:13 +01:00
|
|
|
|
2014-02-01 19:44:40 +01:00
|
|
|
Wer trinkt Wasser? Wem gehört das Zebra?
|
|
|
|
|
|
|
|
\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=zebraraetsel.pro]{prolog}{scripts/prolog/zebraraetsel.pro}
|
|
|
|
|
2014-03-05 14:36:32 +01:00
|
|
|
TODO
|
|
|
|
|
2014-02-01 19:44:40 +01:00
|
|
|
\section{Weitere Informationen}
|
|
|
|
\begin{itemize}
|
|
|
|
\item \href{http://wiki.ubuntuusers.de/Prolog}{\path{wiki.ubuntuusers.de/Prolog}}: Hinweise zur Installation von Prolog unter Ubuntu
|
|
|
|
\end{itemize}
|
|
|
|
\index{Prolog|)}
|