Verslag drafting
This commit is contained in:
parent
44d2876f57
commit
130ff622c9
2 changed files with 115 additions and 3 deletions
11
documentatie/9781292153971.bib
Normal file
11
documentatie/9781292153971.bib
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
@book{russell2016,
|
||||||
|
author = {Russell, Stuart and Norvig, Peter},
|
||||||
|
title = {{Artificial Intelligence A Modern Approach, Global Edition}},
|
||||||
|
abstract = {{For one or two-semester, undergraduate or graduate-level courses in Artificial Intelligence.
The long-anticipated revision of this best-selling text offers the most comprehensive, up-to-date introduction to the theory and practice of artificial intelligence.
}},
|
||||||
|
pages = {1152},
|
||||||
|
publisher = {Pearson Deutschland},
|
||||||
|
year = {2016},
|
||||||
|
isbn = {9781292153964},
|
||||||
|
doi = {},
|
||||||
|
url = {https://elibrary.pearson.de/book/99.150005/9781292153971}
|
||||||
|
}
|
|
@ -17,12 +17,109 @@
|
||||||
\begin{document}
|
\begin{document}
|
||||||
\maketitle
|
\maketitle
|
||||||
|
|
||||||
% Lexer op basis van https://craftinginterpreters.com/scanning.html
|
\section{Inleiding}\label{sec:inleiding}
|
||||||
|
|
||||||
|
% Uitvoeren van testen ref appendix
|
||||||
|
|
||||||
|
\section{Architectuur}\label{sec:architectuur}
|
||||||
|
|
||||||
|
% Overzicht van programma-loop
|
||||||
|
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Lexing and parsing
|
||||||
|
\item Preprocessor
|
||||||
|
\item Programma en Repl
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
% Parser maakt gebruik van welk Grammar???
|
||||||
|
|
||||||
|
% Preprocessor om parser eenvoudig te houden (eventueel later eigen implementatie
|
||||||
|
|
||||||
|
% Interfaces: satisfiable, resolvent
|
||||||
|
|
||||||
|
\subsection{Unificatie}\label{subsec:unificatie}
|
||||||
|
|
||||||
|
Zoals beschreven in Artificial Intelligence a Modern Approach. Algoritme is geïnspireerd door
|
||||||
|
|
||||||
|
\section{Implementatie}\label{sec:implementatie}
|
||||||
|
|
||||||
|
% Kotlin, libraries
|
||||||
|
|
||||||
|
% Data representatie: klassen, satisfiable, resolvent
|
||||||
|
|
||||||
|
%% Evaluatie strategie
|
||||||
|
|
||||||
|
% Overzicht van geïmplementeerde predicaten in appendix.
|
||||||
|
|
||||||
|
% Belangrijkste delen zijn Clause.satisfy
|
||||||
|
|
||||||
|
\section{Resultaat}\label{sec:resultaat}
|
||||||
|
|
||||||
|
% Code wordt lelijk en overzichtelijk. Door de geneste datatypes veel boilerplate.
|
||||||
|
|
||||||
|
\subsection{Afwijkingen van SWI-Prolog}\label{subsec:afwijkingen}
|
||||||
|
|
||||||
|
% Occurs check
|
||||||
|
|
||||||
|
% SLD Resolutie
|
||||||
|
In tegenstelling tot ISO Prolog en SWI-Prolog, maak ik geen gebruik van SLD-resolutie.
|
||||||
|
% TODO Bronnen voor SLD-resolutie
|
||||||
|
% TODO Bronnen voor ISO-Prolog maakt gebruik van SLD resolutie
|
||||||
|
% TODO Bronnen voor SWIPL maakt gebruik van SLD resolutie
|
||||||
|
|
||||||
|
\section{Toekomstig werk}\label{sec:toekomstig-werk}
|
||||||
|
|
||||||
|
% Stack gebruiken
|
||||||
|
|
||||||
|
\section{Conclusie}\label{sec:conclusie}
|
||||||
|
|
||||||
\appendix
|
\appendix
|
||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
\section{Geïmplementeerde predicaten}\label{sec:predicaten}
|
\section{Aanvullende opmerkingen}\label{sec:aanvullende-opmerkingen}
|
||||||
|
|
||||||
|
\subsection{Operator precedence en associativiteit}\label{subsec:operator-precedence}
|
||||||
|
|
||||||
|
Mijn implementatie heeft volledig ondersteuning voor operator precendentie en associativiteit.
|
||||||
|
% TODO Link naar prolog tabel
|
||||||
|
|
||||||
|
\subsection{Test driven development}\label{subsec:ttd}
|
||||||
|
|
||||||
|
Doorheen de ontwikkeling van grote delen van mijn implementatie heb ik gebruik gemaakt van Test Driven Development door eerst een klasse te definiëren met Kotlin TODO() implementaties, vervolgens testen te schrijven die falen en pas daarna mijn functies te implementeren todat de testen slagen.
|
||||||
|
|
||||||
|
\subsection{Onafgewerkte Lexer en Parser implementatie}\label{subsec:lexer-parser}
|
||||||
|
|
||||||
|
Bij de start van het project was ik begonnen met het schrijven van mijn eigen lexer en parser. Uit gebruik omdat het eenvoudiger was om de parser library
|
||||||
|
% TODO reference sectie over de parser
|
||||||
|
te gebruiken.
|
||||||
|
|
||||||
|
De implementatie was gebaseerd op
|
||||||
|
% TODO Crafting interpreters
|
||||||
|
% TODO Dmitri Soshnikov
|
||||||
|
|
||||||
|
De voorlopige implementatie van de lexer en parser kunnen hier teruggevonden worden.
|
||||||
|
% TODO Link naar commit met voorlopige implementatie
|
||||||
|
|
||||||
|
\section{Uitvoeren en testen}\label{sec:uitvoeren-en-testen}
|
||||||
|
|
||||||
|
Om Ghent Prolog op een Windows, Linux of MacOS uit te voeren is het voldoende om Java te installeren en Ghent Prolog op te roepen met `./src/gpl`. De nodige stappen, waaronder het bouwen van een JAR, worden dan automatisch uitgevoerd.
|
||||||
|
|
||||||
|
De ingediende JAR kan ook handmatig opgeroepen worden met \texttt{java -jar ./build/gpl.jar}.
|
||||||
|
|
||||||
|
Er word ook een Docker omgeving voorzien waarin Ghent Prolog opgeroepen kan worden met \texttt{gpl}.
|
||||||
|
|
||||||
|
Het programma ondersteunt de volgende vlaggen:
|
||||||
|
|
||||||
|
% TODO gpl --help
|
||||||
|
|
||||||
|
\subsection{Testen}\label{subsection:testen}
|
||||||
|
|
||||||
|
De testen kunnen uitgevoerd worden door de meeste IDE's.
|
||||||
|
|
||||||
|
Alternatief kunnen de testen uitgevoerd worden met \texttt{./gradlew test}. Resultaten worden naar \texttt{stdout} geschreven of kunnen bekeken worden met
|
||||||
|
% TODO HTML rapporten.
|
||||||
|
|
||||||
|
\section{Overzicht van geïmplementeerde predicaten}\label{sec:predicaten}
|
||||||
|
|
||||||
\begin{multicols}{2}
|
\begin{multicols}{2}
|
||||||
\begin{itemize}[label={}]
|
\begin{itemize}[label={}]
|
||||||
|
@ -123,4 +220,8 @@
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
\end{multicols}
|
\end{multicols}
|
||||||
|
|
||||||
\end{document}
|
\section{Dankwoord}\label{sec:dankwoord}
|
||||||
|
|
||||||
|
Bedankt aan LogicalCaptain om steeds nuttige informatie en voorbeelden te geven bij SWI-Prolog documentatie die iets minder duidelijk is. Uw nota's waren verhelderend en zorgden voor een beter begrip van en voor de nuances van SWI-Prolog.
|
||||||
|
|
||||||
|
\end{document}
|
||||||
|
|
Reference in a new issue