Skip to content

Commit ad7424d

Browse files
author
Oskar Lundström
committed
Flyttade dim.impl till res och delade in res i avsnitt
1 parent 50c5e05 commit ad7424d

File tree

5 files changed

+145
-189
lines changed

5 files changed

+145
-189
lines changed

Rapport/include/Metod.tex

Lines changed: 1 addition & 157 deletions
Original file line numberDiff line numberDiff line change
@@ -188,163 +188,7 @@ \subsection{Implementation av domänspecifika språk för områdena}
188188
Testerna gjordes med hjälp av \textit{QuickCheck}~\cite{QC} vilket är ett
189189
testningsverktyg i Haskell som genererar många och slumpmässiga testfall. Att
190190
lagarna gällde för de domänspecifika språken verifierades med andra ord genom
191-
testa för många exempelvärden. Inga bevis, utan enbart tester, gjordes för att kontrollera att lagarna gällde.
192-
193-
\subsubsection*{Implementation av grundläggande områden}
194-
\label{sec:grund_impl}
195-
196-
För att konkret visa hur en implementation av ett grundläggande område ser ut
197-
och motiveringen bakom den visas här ett exempel. Exemplet kommer från
198-
läromaterialet och implementerar fysikaliska dimensioner i Haskell.
199-
200-
I fysiken finns det dimensioner \cite{dimensioner_ne}. Några exempel är \textit{längd},
201-
\textit{massa} och \textit{hastighet}. Dimensionerna kan läggas i en av två
202-
kategorier: basdimensioner eller sammansatta dimensioner. Det finns enbart sju
203-
basdimensioner (längd, massa, tid, elektrisk ström, temperatur, substansmängd och
204-
ljusstyrka) medan det finns oändligt många sammansatta. Sammansatta
205-
dimensioner fås genom att multiplicera eller dividera två andra dimensioner. Av längd, massa och hastighet är längd och massa basdimensioner medan hastighet är sammansatt.
206-
207-
En första ansats till en implementation skulle därför kunna se ut som
208-
209-
% Dessa inställningar ska bara användas vid "inline" kod som ej är separat figur.
210-
\begin{lstlisting}[frame=none, belowskip=-0.5\baselineskip, xleftmargin=0.5in]
211-
data BD -- Basdimension
212-
= Le -- `Längd'
213-
| Ma -- Massa
214-
| Ti -- Tid
215-
| Cu -- `Elektrisk ström'
216-
| Te -- Temperatur
217-
| Su -- `Substansmängd'
218-
| Lu -- Ljusstyrka
219-
\end{lstlisting}
220-
221-
där \texttt{BD} syntaktiskt representerar de sju basdimensionerna.
222-
Sammansatta dimensioner kan representeras med ett syntaxträd med följande datatyp
223-
224-
\begin{lstlisting}[frame=none, belowskip=-0.5\baselineskip, xleftmargin=0.5in]
225-
data Dim = BaseDim BD -- `Löv med grundläggande dimension'
226-
| Mul Dim Dim -- `Förgrening med multiplikation'
227-
-- `mellan två andra dimensioner'
228-
| Div Dim Dim -- `Förgrening med division mellan två'
229-
-- `andra dimensioner'
230-
\end{lstlisting}
231-
232-
Några exempelvärden blir då
233-
234-
\begin{lstlisting}[frame=none, belowskip=-0.5\baselineskip, xleftmargin=0.5in]
235-
`length = BaseDim Le'
236-
`velocity = Div length (BaseDim Ti)'
237-
\end{lstlisting}
238-
239-
Denna implementation har dock två problem. För det första finns det en
240-
syntaktisk, men ingen semantisk, skillnad mellan
241-
242-
\begin{lstlisting}[frame=none, belowskip=-0.5\baselineskip, xleftmargin=0.5in]
243-
Le
244-
\end{lstlisting}
245-
246-
och
247-
248-
\begin{lstlisting}[frame=none, belowskip=-0.5\baselineskip, xleftmargin=0.5in]
249-
BaseDim Le
250-
\end{lstlisting}
251-
252-
För det andra måste olika syntaktiska former kunna förenklas till en och samma
253-
form. Till exempel måste
254-
255-
\begin{lstlisting}[frame=none, belowskip=-0.5\baselineskip, xleftmargin=0.5in]
256-
Mul (Div (BaseDim Le) (BaseDim Ti)) (BaseDim Ti)
257-
\end{lstlisting}
258-
259-
kunna förenklas till
260-
261-
\begin{lstlisting}[frame=none, belowskip=-0.5\baselineskip, xleftmargin=0.5in]
262-
BaseDim Le
263-
\end{lstlisting}
264-
265-
Även om en sådan förenklare går att göra valdes en annan lösning i
266-
läromaterialet. Nyckeln ligger i att betrakta dimensioner som en multiplikation
267-
av basdimensioner med exponenter. Ta till exempel hastighet
268-
\begin{align*}
269-
\frac{\textit{Längd}}{\textit{Tid}} \iff \textit{Längd}^1 * Tid^{-1}
270-
\end{align*}
271-
Då kan följande representation användas för dimensioner
272-
273-
\begin{lstlisting}[frame=none, belowskip=-0.5\baselineskip, xleftmargin=0.5in]
274-
data Dim = Dim Int -- Exponent till `längd'
275-
Int -- Exponent till massa
276-
Int -- Exponent till tid
277-
Int -- Exponent till `ström'
278-
Int -- Exponent till temperatur
279-
Int -- Exponent till `substansmängd'
280-
Int -- Exponent till ljusstyrka
281-
\end{lstlisting}
282-
283-
Datatypen har sju fält som vardera anger vilken exponent respektive
284-
basdimension har. Hastighet representerat av datatypen är
285-
286-
\begin{lstlisting}[frame=none, belowskip=-0.5\baselineskip, xleftmargin=0.5in]
287-
hastighet = Dim 1 0 -1 0 0 0 0
288-
\end{lstlisting}
289-
290-
som har $1$ som exponent för basdimensionen längd och $-1$ som exponent för
291-
basdimensionen tid.
292-
293-
Multiplikation av två dimensioner går till som multiplikation mellan två tal.
294-
Till exempel \begin{align*}
295-
Hastighet * Tid = (Längd^1 * Tid^{-1}) * Tid^1 = Längd^1 * Tid^{-1 + 1} =
296-
Längd \end{align*}
297-
Det vill säga, potensregeln används för att beräkna den nya produkten.
298-
299-
Multiplikation mellan två dimensioner i läromaterialet implementerades på ett
300-
motsvarande sätt
301-
302-
\begin{lstlisting}[frame=none, belowskip=-0.5\baselineskip, xleftmargin=0.5in]
303-
mulDim :: Dim -> Dim -> Dim
304-
mulDim (Dim le1 ma1 ti1 cu1 te1 su1 lu1)
305-
(Dim le2 ma2 ti2 cu2 te2 su2 lu2) =
306-
Dim (le1+le2) (ma1+ma2) (ti1+ti2) (cu1+cu2)
307-
(te1+te2) (su1+su2) (lu1+lu2)
308-
\end{lstlisting}
309-
310-
Exponenterna hos de två dimensionerna som multipliceras adderas i enlighet med
311-
potensregeln.
312-
313-
För att se alla implementationer hänvisas läsaren till läromaterialet i sig. Ett
314-
utdrag finns i bilaga~\ref{cha:utdrag} och det fullständiga finns tillgängligt
315-
på internet~\cite{LYAP}.
316-
317-
\subsubsection*{Implementation av komposita områden}
318-
319-
Implementationen av komposita områden var en vidareutveckling av de redan
320-
implementerade grundläggande områdena. Detta utfördes genom att kombinera
321-
element från två eller fler områden för att på så sätt tillsammans skapa ett
322-
nytt område. Denna kombination växte fram organiskt genom att studera de områden
323-
som skulle implementeras och se vilka av de grundläggande områdena som
324-
låg till grund för det. Efter en sådan genomgång växte den faktiska
325-
implementationen fram genom experimentering och diskussion inom gruppen.
326-
327-
Ett exempel på ett komposit område är implementationen av partikelmekanik
328-
där de grundläggande områdena vektorer och matematisk analys
329-
kombinerades. Anledningen till detta var att partiklars position, hastighet och
330-
acceleration modelleras med vektorer, dessutom är de krafter som påverkar
331-
partiklar även de modellerade som vektorer. Sedan används matematisk analys för att
332-
göra beräkningar på dem. Därför var det naturligt att modellera partikelmekanik
333-
med hjälp av vektorer vars komponenter var uttryck som
334-
implementerades av matematisk analys.
335-
336-
Exempel från läromaterialet:
337-
\begin{lstlisting}[frame=none, belowskip=-0.5\baselineskip, xleftmargin=0.5in]
338-
type Mass = FunExpr
339-
type VectorE = Vector3 FunExpr -- Vector of functional
340-
-- expressions
341-
342-
data Particle = P { pos :: VectorE -- Position as a
343-
-- function of time
344-
-- , unit m
345-
, mass :: Mass -- Mass, unit kg
346-
}
347-
\end{lstlisting}
191+
testa för ett stort antal exempelvärden. Inga bevis, utan enbart tester, gjordes för att kontrollera att lagarna gällde.
348192

349193
\subsection{Skriva lärotext}
350194

Rapport/include/Resultat.tex

Lines changed: 114 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,40 @@
11
\chapter{Resultat}
22

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
44
resultaten från utvärderingen med testgruppen och mötena med Åke Fäldt redovisas.
55

66
\section{Läromaterialet}\label{sec:res_laromaterial}
77

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

1414
\begin{figure}[tph]
15+
\centering
1516
\includegraphics[width=\linewidth]{figure/smakprov_laromaterial.png}
1617
\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}
1718
\end{figure}
1819

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-
2720
\begin{figure}[tph]
2821
\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]
3831
\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}
4435
\end{figure}
4536

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:
4938

5039
\begin{itemize}
5140
\item Dimensioner
@@ -96,6 +85,99 @@ \section{Läromaterialet}\label{sec:res_laromaterial}
9685
antal delvis färdigställda områden, till exempel bevisföring. Texten i
9786
läromaterialet är skriven på engelska.
9887

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+
99181
\section{Utvärderingen med testgruppen}\label{sec:res_test}
100182

101183
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}
139221
Både Roger Johansson, programansvarig på datateknik, och datas nämnd för studier (DNS)
140222
var positiva till projektets initiativ och målsättning. Johansson beskrev
141223
problematiken med att matematiken inte är lika naturlig för datastudenter som för
142-
andra ingenjörsområden
224+
andra ingenjörsområden.

Rapport/include/frontmatter/Ordlista.tex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ \chapter*{Ordlista}
44

55
\textbf{Datastudent} En student med bakgrund inom data och IT.
66

7+
\textbf{Dimensioner} Syftar på \textit{fysikaliska} dimensioner.
8+
79
\textbf{DSL} Förkortning av \textit{Domain Specific Language}, engelska för domänspecifikt språk.
810

911
\textbf{Fysikläraren} Åke Fäldt.

Rapport/include/settings/Settings.tex

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11

22
\usepackage{url}
33
\usepackage{xcolor} % Setting text color
4+
\usepackage{csquotes}
5+
6+
\newenvironment{inline}
7+
{\begin{lstlisting}[frame=none,belowskip=-0.5\baselineskip]}
8+
{\end{lstlisting}}
9+
410

511
\newenvironment{binge} {
612
\color{red}
@@ -56,6 +62,7 @@
5662
\lstset{basicstyle=\ttfamily}
5763
\lstset{commentstyle=\ttfamily}
5864
\lstset{escapeinside=`'}
65+
\lstset{deletekeywords={length}}
5966
\usepackage{chemfig} % Chemical structures
6067
\usepackage[margin=1in]{geometry} % Page margin lengths
6168
\usepackage{eso-pic} % Create cover page background

texput.log

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017) (preloaded format=pdflatex 2018.3.27) 22 MAY 2018 11:41
2+
entering extended mode
3+
restricted \write18 enabled.
4+
%&-line parsing enabled.
5+
**Main
6+
7+
! Emergency stop.
8+
<*> Main
9+
10+
End of file on the terminal!
11+
12+
13+
Here is how much of TeX's memory you used:
14+
3 strings out of 492982
15+
99 string characters out of 6126467
16+
54251 words of memory out of 5000000
17+
3671 multiletter control sequences out of 15000+600000
18+
3640 words of font info for 14 fonts, out of 8000000 for 9000
19+
1141 hyphenation exceptions out of 8191
20+
0i,0n,0p,1b,6s stack positions out of 5000i,500n,10000p,200000b,80000s
21+
! ==> Fatal error occurred, no output PDF file produced!

0 commit comments

Comments
 (0)