Skip to content

Commit 75ed282

Browse files
author
Oskar Lundström
committed
Kortfattade disk om lämpliga
1 parent a7e6f01 commit 75ed282

File tree

2 files changed

+33
-56
lines changed

2 files changed

+33
-56
lines changed

Rapport/include/Diskussion.tex

Lines changed: 33 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -191,64 +191,42 @@ \subsection{Om läromaterialets fokus på matematik och Haskell snarare än
191191

192192
\subsection{Lämpliga områden för domänspecifika språk}\label{sec:lampligt}
193193

194-
Under genomförandet av projektet utfördes flera experiment för att bedöma olika områdens lämplighet för att modelleras med ett domänspecifikt språk. Det visade sig snabbt att vissa områden lämpade sig bättre än andra. Områden som vektorer och matematisk analys lämpade sig väldigt väl, och ingår även i läromaterialet (se avsnitt~\ref{sec:res_laromaterial}). Detta var inte särskilt förvånande eftersom båda områdena är varsin egen gren inom matematiken och lämpar sig därmed väl för implementering i Haskell som är ett språk med nära anknytning till matematik. En annan sak som dessa områden hade gemensamt var en tydlig syntax och en fix struktur som bestod av ``data och operationer''. Tabell~\ref{tab:data_och_ops} visar några exempel på områden med sina data och operationer.
195-
196-
\begin{table}[tph]
197-
\centering
198-
\caption{Exempel på data och operationer i några domänspecifika språk}\label{tab:data_och_ops}
199-
\begin{tabular}{l|l}
200-
\toprule
201-
DSL / data & Exempel på operationer \\ \midrule
202-
Dimensioner & Multiplikation, division \\
203-
Vektorer & Addition, skalärprodukt \\
204-
Analys, funktioner & Derivera, multiplicera \\ \bottomrule
205-
\end{tabular}
206-
\end{table}
207-
208-
Att notera ur tabell~\ref{tab:data_och_ops} är att operationerna inom ett område görs på en och samma slags data, och sedan resulterar i samma slags data igen. Det här exemplifieras i matematisk analys, där derivering är en operation som görs på en funktion och resulterar i en annan funktion. Detta illustreras i figur~\ref{fig:analys_op_exempel}.
194+
När domänspecifika språk implementerades visade det sig att vissa områden lämpade sig bättre än andra. Exempel på ett lämpligt och et mindre lämpligt område är vektorer respektive lutande plan\footnote{Läromaterialet behandlar fortfarande lutande plan, men inte som ett \textit{eget} domänspecifikt språk. Istället \textit{tillämpas} det domänspecifika språket för vektorer.}. Vad som skiljer dem åt är enligt oss att lämpliga områden består av tydliga \textit{data och operationer} medan mindre lämpliga områden består av \textit{egenskaper och samband}.
209195

210-
\begin{figure}[tph]
211-
\begin{mdframed}
212-
\vspace{-0.5cm}
196+
Inom området vektorer är vektorer data och till exempel vektoraddition en operation. I matematik defineras (en tvådimensionell) vektor som
213197
\begin{align*}
214-
&D : (\R \rightarrow \R) \rightarrow (\R \rightarrow \R) \\
215-
&D = derivera \\
216-
&f_1 : \R \rightarrow \R \\
217-
&f_1(x) = x^2 \\
218-
&f_2 : \R \rightarrow \R \\
219-
&f_2(x) = (D(f_1))(x) = 2x
198+
\vec{v} = \begin{bmatrix}
199+
v_1 \\
200+
v_2
201+
\end{bmatrix}
220202
\end{align*}
221-
\end{mdframed}
222-
\caption{Ett exempel på hur derivering, en operation i matematisk analys, tar data av ett slag till data av samma slag igen. I exemplet är $f_1$ och $f_2$ data av slaget funktioner, medan $D$ är operationen derivering. Som synes har denna operation samma slags data både in och ut.}\label{fig:analys_op_exempel}
223-
\end{figure}
224-
225-
Den fixa strukturen kombinerat med data och operationer\todo{?} gör det enkelt att modellera dessa områden med datatyper i Haskell. Datatyper har nämligen också en fix form. Dessutom blir relationen mellan data och operationer i fysik och datatyper och funktioner i Haskell tydligare, vilket illustreras i figur~\ref{fig:haskell_fysik_likhet}, som jämför fysikaliska dimensioner med motsvarande implementation i Haskell. Denna strukturella likhet gör modellerandet och manipulerandet av data enkel att genomföra rent tekniskt. Men den innebär också en pedagogisk vinst. Genom att ha strukturerat upp fysik tydligt i Haskell blir det förhoppningsvis enklare för läsaren att förstå hur datan (de matematiska strukturerna) hänger ihop rent fysikaliskt. Och även hur relationerna mellan olika datatyper och funktioner som dyker upp i läromaterialet direkt kan översättas till motsvarande relationer inom fysik.
226-
227-
\begin{figure}[tph]
228-
\centering
229-
\frame{\includegraphics[width=0.6\linewidth]{figure/haskell_fysik_likhet.pdf}}
230-
\caption{Jämförelse mellan fysikaliska dimensioner (övre raden) och motsvarande implementation i Haskell (undre raden). Implementationen kommer från det resulterande läromaterialet. Mer om implementationen finns att läsa i avsnitt~\ref{sec:grund_impl}}\label{fig:haskell_fysik_likhet}
231-
\end{figure}\todo{Figur ligger fel enligt Exam}
232-
233-
Anledningen till att vi tycker att dessa drag gör ett område mer eller mindre lämpat för ett domänspecifikt språk kommer från det val vi gjorde tidigt i projektet, nämligen valet att använda Haskell. I avsnitt~\ref{sec:syntax} beskriver vi begreppen syntax, semantik och syntaxträd och dess koppling till både domänspecifika språk och Haskell. Dock finns det ingenting som säger att det måste läggas ett sådant stort fokus som vi har gjort på till exempel syntaxträd. Hade vi istället valt bort Haskell till fördel för ett objektorienterat språk hade vår definition av vad som gör ett område lämpat för implementation kanske sett helt annorlunda ut.
234-
235-
I kontrast till dessa lämpliga områden står mindre lämpliga områden (eller åtminstone områden som vi inte lyckades göra något bra av). Lutande plan är ett exempel på ett mindre lämpligt område. Områden av detta slag har drag som gör det mindre lämpligt än exempelvis vektorer.
236-
237-
När ett domänspecifikt språk skapas till ett område görs det genom att identifiera syntaxen som används, datan som modelleras, vilka operationer som används på denna data och vad det finns för lagar och samband som gäller för dessa. Detta sätt att arbeta fungerar bra för områden som är generella och som går att modellera på ett sätt som tillåter vidareutveckling, såsom vektorer i flera dimensioner eller vektorer vars komponenter kan vara av vilken typ som helst.
238-
239-
Ett exempel på ett område som inte har några tydliga data och operationer är lutande plan. Ett sådant område har istället teoretiska samband som relaterar olika egenskaper i systemet till varandra. Ett sådant samband är till exempel $a = g \cdot \sin(v)$ för det lutande planet i figur~\ref{fig:lutande_plan}.
240-
241-
\begin{figure}[tph]
242-
\centering
243-
\frame{\includegraphics[width=0.5\linewidth]{figure/Lutande_plan.pdf}}
244-
\caption{Den variant av lutande plan som refereras till i exemplet i texten. $a$ är en lådas acceleration längs med planet, $g$ är tyngdacceleration och $v$ är vinkeln. Friktionen antas vara försumbar.}~\label{fig:lutande_plan}
245-
\end{figure}
246-
247-
Samband och ekvationer av detta slag kan visserligen modelleras som ett domänspecifikt språk, men vi menar att nyttan inte blir stor med det eftersom allt vi då gör är att skriva de formler som redan finns att tillgå i diverse kursböcker i fysik utan att tillföra någon ny kunskap och utan att modellera dem på ett generellts eller unikt sätt. Det som då kan göras är att programmera en ekvationslösare men den hade varit både mekanisk och komplex. Den skulle alltså skilja sig drastiskt från hur studenter löser problem för hand och skulle vara svår att förstå. Alldeles för mycket fokus skulle hamna på algoritmer istället för fysik. Vi anser även att en ekvationslösare inte hjälper till att lära ut fysik, tvärtom döljer den matematiken som ligger bakom svaret.
248-
249-
När det kommer till lutande plan och liknande områden är nyckeln att visserligen känna till vilka samband som gäller, men det är framförallt viktigt att veta när de ska användas och hur de ska tillämpas på olika typer av uppgifter. Vi behandlar därför områden som lutande plan genom att lösa exempeluppgifter modellerade i de tidigare domänspecifika språken. De tidigare språken tillhandahåller de matematiska verktyg som behövs för att koda upp lösningar av problem. Därav innehåller det resulterande läromaterialet, som beskrivs i avsnitt~\ref{sec:res_laromaterial}, inga domänspecifika språk för fysikaliska problem.
250-
251-
Att vissa områden var mindre lämpliga var ett oväntat resultat i projektets genomförande. Vid start trodde vi att det skulle gå att göra domänspecifika språk för alla områden, såväl matematiska som fysikaliska, men som vi diskuterat här gick inte det. Istället gjordes uppdelningen mellan grundläggande och komposita områden, som beskrevs i avsnitt~\ref{sec:valet}, så att fysikaliska områden (som blev komposita) kunde behandlas som tillämpningar av grundläggande områden.
203+
och vektoraddition som
204+
\begin{align*}
205+
\vec{u} + \vec{w} = \begin{bmatrix}
206+
u_1 \\
207+
u_2
208+
\end{bmatrix}
209+
+ \begin{bmatrix}
210+
w_1 \\
211+
w_2
212+
\end{bmatrix}
213+
= \begin{bmatrix}
214+
u_1 + w_1 \\
215+
u_2 + w_2
216+
\end{bmatrix}
217+
\end{align*}
218+
I Haskell kan en datatyp för vektorer defineras som
219+
\begin{lstlisting}
220+
data V = V Double Double
221+
\end{lstlisting}
222+
och vektoraddition som
223+
\begin{lstlisting}
224+
va :: V -> V -> V
225+
(V u1 u2) `va` (V w1 w2) = V (u1+u2) (w1+w2)
226+
\end{lstlisting}
227+
Det finns enligt oss en tydlig likhet mellan matematik och Haskell i detta fall, och även i för andra lämpliga områden, vilket gör att vi tycker det blir enkelt att modellera och förstå områden som vektorer.
228+
229+
Egenskaper och samband är enligt oss svårare att modellera meningsfullt. Visserligen kan ekvationer modelleras i Haskell, men då blir det bara en ekvationslösare. Nyckeln, i till exempel lutande plan, är att känna till sambanden och veta när de ska användas. Vi behandlar därför lutande plan genom att tillämpa det domänspecifika språket för vektorer. Att vissa områden var mindre lämpliga var ett oväntat resultat. I början av projektets start trodde vi att domänspecifika språk skulle kunna implementeras till alla typer av områden.
252230

253231
\subsection{Domänspecifika språk, fysik och pedagogiska aspekter}\label{sec:bara_fysik}
254232

Rapport/include/settings/Settings.tex

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@
6161
\lstset{breaklines=true}
6262
\lstset{basicstyle=\ttfamily}
6363
\lstset{commentstyle=\ttfamily}
64-
\lstset{escapeinside=`'}
6564
\lstset{deletekeywords={length}}
6665
\lstset{frame=none}
6766
\lstset{belowskip=-0.5\baselineskip}

0 commit comments

Comments
 (0)