|
1 | 1 | \chapter{Resultat} |
2 | 2 |
|
3 | | -I detta kapitel redovisas kortfattat det resulterande läromaterialet, vilket består av fem kapitel. Det är även publicerat på en hemsida och dess källkod är fritt tillgänglig. Även |
| 3 | +I detta kapitel redovisas det resulterande läromaterialet, vilket består av fem kapitel. Det är publicerat på en hemsida och dess källkod är fritt tillgänglig. Även |
4 | 4 | resultaten från utvärderingen med testgruppen och mötena med Åke Fäldt redovisas. |
5 | 5 |
|
6 | 6 | \section{Läromaterialet}\label{sec:res_laromaterial} |
7 | 7 |
|
8 | | -Läromaterialet blev till slut en sammanvävning av domänspecifika språk som |
9 | | -modellerar fysik, och en lärotext som förklarar kopplingen mellan fysiken och de |
10 | | -domänspecifika språken. Figur~\ref{fig:smakprov_laromaterial} visar ett kort |
11 | | -utdrag ur läromaterialet. Där ses hur domänspecifika språk och lärotext |
12 | | -är sammanvävda. Ett längre utdrag finns i bilaga~\ref{cha:utdrag}. |
| 8 | +Detta avsnitt innehåller en översikt av läromaterialet samt ett utdrag av vardera kapitel. Utdragen exemplifier delar av läromaterialet och implementationerna av domänspecifika språk. De fullständiga implementationerna är inte inkluderade (och förklarade) eftersom det är precis det läromaterialet innehåller. Rapporten skulle då bli en kopia av läromaterialet. Istället hänvisas till ett längre utdrag i bilaga~\ref{cha:utdrag} samt hemsidan där läromaterialet~\cite{LYAP} finns tillgängligt. |
| 9 | + |
| 10 | +\subsection{Översikt} |
| 11 | + |
| 12 | +Läromaterialet är en löpande text där Haskell-kod och lärotext sammanvävts. Det ser ut som i figur~\ref{fig:smakprov_laromaterial}. I texten följer läsaren med i implementationen av ett domänspecifikt språk och det visas hur det används. Tanken är att läsaren parallellt programmerar det som texten förklarar, för att på så sätt även få praktisk färdighet i det som presenterats. För detta syfte finns det även övningar tillagda direkt i den löpande texten, se figur~\ref{fig:smakprov_ovning}, som ofta innebär att läsaren själv ska implementera en liten del av det domänspecifika språket. Det finns också övningar i slutet av kapitlet som ofta innebär större vidareutvecklingar av de domänspecifika språken. |
13 | 13 |
|
14 | 14 | \begin{figure}[tph] |
| 15 | + \centering |
15 | 16 | \includegraphics[width=\linewidth]{figure/smakprov_laromaterial.png} |
16 | 17 | \caption{Ett smakprov av det resulterande läromaterialet. Lärotexten ligger mot den ljusgrå bakgrunden medan det domänspecifika språket ligger mot den mörkgrå. Notera att detta exemplets källkod (i Litterate Haskell) har visats tidigare i avsnitt \ref{sec:lhs}.}~\label{fig:smakprov_laromaterial} |
17 | 18 | \end{figure} |
18 | 19 |
|
19 | | -Språket i lärotexten är enligt projektgruppen lättsamt\footnote{Diskuteras utförligare i avsnitt \ref{sec:res_disk}.} och det finns även bilder och övningar. |
20 | | -Figur~\ref{fig:smakprov_bild_laromaterial} är ett exempel på en bild ur |
21 | | -läromaterialet. Notera speciellt den medvetet oseriösa ritningstekniken som är |
22 | | -tänkt att vara rolig och muntra upp läsaren. Övningar ligger både i den löpande |
23 | | -texten och i slutet av kapitlet. Övningarna i den löpande texten innebär oftast |
24 | | -att läsaren ska implementera en liten del av det aktuella domänspecifika språket |
25 | | -på egen hand, vilket illustreras i figur~\ref{fig:smakprov_ovning}. Övningarna i slutet av kapitlet innebär ofta större vidareutvecklingsmöjligheter av de domänspecifika språken. |
26 | | - |
27 | 20 | \begin{figure}[tph] |
28 | 21 | \centering |
29 | | - \begin{subfigure}[t]{0.5\textwidth} |
30 | | - \centering |
31 | | - \includegraphics[width=0.9\linewidth]{figure/smakprov_bild_laromaterial.png} |
32 | | - \caption{Exempel på en bild. Bilden visar hur en hund springer och |
33 | | - hoppar upp på en stillastående |
34 | | - vagn.}~\label{fig:smakprov_bild_laromaterial} |
35 | | - \end{subfigure}% |
36 | | - ~~~ |
37 | | - \begin{subfigure}[t]{0.5\textwidth} |
| 22 | + \includegraphics[width=\linewidth]{figure/smakprov_ovning.png} |
| 23 | + \caption{Exempel på en övning. Övningen ligger som en del av den löpande texten.} |
| 24 | + \label{fig:smakprov_ovning} |
| 25 | +\end{figure} |
| 26 | + |
| 27 | +Språket i lärotexten är enligt projektgruppen lättsamt\footnote{Diskuteras utförligare i avsnitt \ref{sec:res_disk}.} och i detta syfte finns det även bilder tillagda. Figur~\ref{fig:smakprov_bild_laromaterial} är ett exempel på en bild ur |
| 28 | +läromaterialet. Notera speciellt den medvetet oseriösa ritningstekniken som är tänkt att vara rolig och muntra upp läsaren. |
| 29 | + |
| 30 | +\begin{figure}[tph] |
38 | 31 | \centering |
39 | | - \includegraphics[width=0.9\linewidth]{figure/smakprov_ovning.png} |
40 | | - \caption{Exempel på en övning. Övningen ligger som en del av den |
41 | | - löpande texten.}~\label{fig:smakprov_ovning} |
42 | | - \end{subfigure} |
43 | | - \caption{Exempel på en bild och en övning ur läromaterialet.} |
| 32 | + \includegraphics[width=\linewidth]{figure/smakprov_bild_laromaterial.png} |
| 33 | + \caption{Exempel på en bild. Bilden visar hur en hund springer och hoppar upp på en stillastående vagn.} |
| 34 | + \label{fig:smakprov_bild_laromaterial} |
44 | 35 | \end{figure} |
45 | 36 |
|
46 | | -Läromaterialet behandlar ett flertal områden inom fysik och matematik. |
47 | | -Fokuset är på klassisk mekanik samt den matematik som tillhör området. I |
48 | | -sin fullständighet är de behandlade områdena: |
| 37 | +Läromaterialet innehåller 5 kapitel som vardera behandlar ett område inom fysik och matematik. Fokuset är på klassisk mekanik samt den matematik som tillhör området. De behandlade områdena är: |
49 | 38 |
|
50 | 39 | \begin{itemize} |
51 | 40 | \item Dimensioner |
@@ -96,6 +85,99 @@ \section{Läromaterialet}\label{sec:res_laromaterial} |
96 | 85 | antal delvis färdigställda områden, till exempel bevisföring. Texten i |
97 | 86 | läromaterialet är skriven på engelska. |
98 | 87 |
|
| 88 | +\subsection{Implementation av dimensioner} |
| 89 | +\label{sec:grund_impl} |
| 90 | + |
| 91 | +I detta avsnitt visas delar av hur implementationen av dimensioner ser ut i läromaterialet. Den fullständiga implementationen innehåller tre delar: |
| 92 | + |
| 93 | +\begin{enumerate} |
| 94 | + \item Dimensioner på värdenivå |
| 95 | + \item Dimensioner på typnivå |
| 96 | + \item Datatyp för storheter |
| 97 | +\end{enumerate} |
| 98 | + |
| 99 | +Dimensioner på värdenivå används för att enkelt kunna skriva ut dimensioner i GHCi. Dimensioner på typnivå används för att ge typsäkerhet till dimensioner, så att till exempel en längd och en massa inte kan adderas, likt att ett värde av typ \texttt{Double} och \texttt{Integer} inte kan adderas i Haskell. Till sist kombineras de två varianterna av dimensioner till en datatyp för storheter som aritmetiska operationer kan utföras på. |
| 100 | + |
| 101 | +Den del som visas här är början av implementationen av dimensioner på värdenivå. Texten är på engelska eftersom läromaterialet är på engelska. Förutom formateringen är det precis som nedanstående som läromaterialet ser ut. |
| 102 | + |
| 103 | +\begin{displayquote} |
| 104 | + |
| 105 | +A dimension can be seen as a product of the base dimensions, with an individual exponent on each base dimension. Because the 7 base dimensions are known in advance, we can design our data type using this fact. |
| 106 | + |
| 107 | +\begin{lstlisting}[frame=none,belowskip=-0.5\baselineskip] |
| 108 | +data Dim = Dim Integer -- Length |
| 109 | + Integer -- Mass |
| 110 | + Integer -- Time |
| 111 | + Integer -- Current |
| 112 | + Integer -- Temperature |
| 113 | + Integer -- Substance |
| 114 | + Integer -- Luminosity |
| 115 | + deriving (Eq) |
| 116 | +\end{lstlisting} |
| 117 | + |
| 118 | +Each field denotes the exponent for the corresponding base dimension. If the exponent is 0, the base dimension is not part of the dimension. Some examples should clarify. |
| 119 | + |
| 120 | +\begin{lstlisting}[frame=none,belowskip=-0.5\baselineskip] |
| 121 | +length = Dim 1 0 0 0 0 0 0 |
| 122 | +mass = Dim 0 1 0 0 0 0 0 |
| 123 | +time = Dim 0 0 1 0 0 0 0 |
| 124 | +current = Dim 0 0 0 1 0 0 0 |
| 125 | +temperature = Dim 0 0 0 0 1 0 0 |
| 126 | +substance = Dim 0 0 0 0 0 1 0 |
| 127 | +luminosity = Dim 0 0 0 0 0 0 1 |
| 128 | + |
| 129 | +velocity = Dim 1 0 (-1) 0 0 0 0 |
| 130 | +\end{lstlisting} |
| 131 | + |
| 132 | +Velocity is $m/s$ or equivalently $m^1*s^{-1}$. This explains why the exponents are as above. |
| 133 | + |
| 134 | +Noticed how we used ``m'' (for metre) for implicitly refering to the dimension ``length''? It’s quite natural to work this way. |
| 135 | + |
| 136 | +\textbf{Exercise} Create values for acceleration, area and charge. |
| 137 | + |
| 138 | +\textbf{Solution} |
| 139 | +\begin{lstlisting}[frame=none,belowskip=-0.5\baselineskip] |
| 140 | +acceleration = Dim 1 0 (-2) 0 0 0 0 |
| 141 | +area = Dim 2 0 0 0 0 0 0 |
| 142 | +charge = Dim 0 0 1 1 0 0 0 |
| 143 | +\end{lstlisting} |
| 144 | + |
| 145 | +\end{displayquote} |
| 146 | + |
| 147 | +Det skapas med andra ord en datatyp för dimensioner som använder sig av en exponent för varje basdimension. I resterande del av detta delkapitel visas hur multiplikation och division samt hur en \textit{utskriftsfunktion}, som skriver ut ett värde snyggt, kan implementeras. Därefter följer ett antal delkapitel som innehåller testning, typnivådimensioner och storheter. Som tidigare nämnt inkluderas de inte här eftersom då skulle rapporten och läromaterialet bli precis samma text. |
| 148 | + |
| 149 | +\subsection{Implementation av partikelmekanik} |
| 150 | + |
| 151 | +Implementationen av komposita områden var en vidareutveckling av de redan |
| 152 | +implementerade grundläggande områdena. Detta utfördes genom att kombinera |
| 153 | +element från två eller fler områden för att på så sätt tillsammans skapa ett |
| 154 | +nytt område. Denna kombination växte fram organiskt genom att studera de områden |
| 155 | +som skulle implementeras och se vilka av de grundläggande områdena som |
| 156 | +låg till grund för det. Efter en sådan genomgång växte den faktiska |
| 157 | +implementationen fram genom experimentering och diskussion inom gruppen. |
| 158 | + |
| 159 | +Ett exempel på ett komposit område är implementationen av partikelmekanik |
| 160 | +där de grundläggande områdena vektorer och matematisk analys |
| 161 | +kombinerades. Anledningen till detta var att partiklars position, hastighet och |
| 162 | +acceleration modelleras med vektorer, dessutom är de krafter som påverkar |
| 163 | +partiklar även de modellerade som vektorer. Sedan används matematisk analys för att |
| 164 | +göra beräkningar på dem. Därför var det naturligt att modellera partikelmekanik |
| 165 | +med hjälp av vektorer vars komponenter var uttryck som |
| 166 | +implementerades av matematisk analys. |
| 167 | + |
| 168 | +Exempel från läromaterialet: |
| 169 | +\begin{lstlisting}[frame=none, belowskip=-0.5\baselineskip, xleftmargin=0.5in] |
| 170 | +type Mass = FunExpr |
| 171 | +type VectorE = Vector3 FunExpr -- Vector of functional |
| 172 | + -- expressions |
| 173 | + |
| 174 | +data Particle = P { pos :: VectorE -- Position as a |
| 175 | + -- function of time |
| 176 | + -- , unit m |
| 177 | + , mass :: Mass -- Mass, unit kg |
| 178 | + } |
| 179 | +\end{lstlisting} |
| 180 | + |
99 | 181 | \section{Utvärderingen med testgruppen}\label{sec:res_test} |
100 | 182 |
|
101 | 183 | Utfallet från utvärderingen med testgruppen var till övervägande del positivt. |
@@ -139,4 +221,4 @@ \section{Möte med programansvarig och datas nämnd för studier} |
139 | 221 | Både Roger Johansson, programansvarig på datateknik, och datas nämnd för studier (DNS) |
140 | 222 | var positiva till projektets initiativ och målsättning. Johansson beskrev |
141 | 223 | problematiken med att matematiken inte är lika naturlig för datastudenter som för |
142 | | -andra ingenjörsområden |
| 224 | +andra ingenjörsområden. |
0 commit comments