2
0
Fork 0
mirror of https://github.com/MartinThoma/LaTeX-examples.git synced 2025-04-25 14:28:05 +02:00
LaTeX-examples/documents/Programmierparadigmen/Prolog.tex

92 lines
3.4 KiB
TeX
Raw Normal View History

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}
2014-03-20 19:20:30 +01:00
In Prolog gibt es Prädikate, die Werte haben. Prädikate werden immer klein geschrieben.
So kann das Prädikat \texttt{farbe} mit den Werten \texttt{rot}, \texttt{gruen},
\texttt{blau}, \texttt{gelb} - welche auch immer klein geschrieben werden - wie
folgt definiert werden:
\inputminted[numbersep=5pt, tabsize=4]{prolog}{scripts/prolog/praedikat-farbe.pl}
\begin{itemize}
\item Terme werden durch \texttt{,} mit einem logischem \textbf{und} verknüpft.
\item Ungleichheit wird durch \texttt{\=} ausgedrückt.
\end{itemize}
So ist folgendes Prädikat \texttt{nachbar(X, Y)} genau dann wahr, wenn $X$
und $Y$ Farben sind und $X \neq Y$ gilt:
\inputminted[numbersep=5pt, tabsize=4]{prolog}{scripts/prolog/simple-term.pl}
2014-02-01 15:32:13 +01:00
\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|)}