Opisno programiranje z LaTeX in octave

Opisno programiranje (literate programming) je pristop k programiranju, ki združuje opis rešitve v naravnem jeziku s kodo primerno za izvedbo v računalniku.
Opisni program tako opiše in razloži logiko programa v naravnem jeziku. V tem prispevku si bomo ogledali, kako lahko uporabimo LaTeX in octave za pisanje opisnih programov.

Trik s komentarji

Pokazali bomo, kako napisati LaTeX dokument, ki bo hkrati izvedljiv v octave. Uporabili bomo znak za komentar %, ki je znak za komentar tako v LaTeXu, kot tudi v octave. V octavu lahko s parom %{ %} sestavimo komentar, ki se razteza čez več vrstic

%{ to je komentar za LaTeX in za octave
Vse kar je napisano v tem odstavku bo \latex prevedel,
octave pa obravnaval kot komentar.
\begin{lstlisting}
%} tu se začne koda za octave
% narisimo graf funkcije sin(x) na intervalu [-pi,pi]
t = linspace(-pi,pi);
plot(t,sin(t))
print -deps "graf.eps"
%{ nadaljujemo z LaTeXom
\end{lstlisting}
Graf, ki smo ga ustvarili z octavom, lahko vstavimo v dokument
\begin{figure}
\includegraphics{graf}
\caption{Graf funkcije $\sin(x)$}
\end{figure}
%} da ne bo octave preveč nesrečen

Zgornji odstavek lahko shranimo v datoteko literate.tex, dodamo še glavo za LaTeX

%{
\documentclass{article}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{verbatim}
\begin{document}
%}
...
%{
\end{document}
%}

in poženemo najprej z octave

octave literate.tex
 

in nato še z LaTeX

latex literate.tex

Vključevanje kode in rezultatov z ukazom input

Kodo ločenih funkcij lahko vključimo v LaTeX dokument z ukazom
\lstinputlisting{funkcija.m}

Podobno lahko rezultate shranimo v dnevnik in dnevnik nato vložimo v dokument:

diary "dnevnik.txt"
% izracunajmo kvadrate prvih 6-ih števil
[1:6].^2
diary off
%{
Kvadrati prvih 6 naravnih števil so
\verbatiminput{dnevnik.txt} %} 

Ali pa se sami ubadamo z pisanjem v datoteko

file= fopen("rezultati.txt");
fprintf(file, "%d& ", [1:5]^2);
fprintf(file, "%d", 6^2);
fclose(file)
%{
\begin{table}[cccccc]
\input{rezultati.txt}
\end{table}
%}

Prednosti in slabosti

Opisno programiranje ima očitne prednosti predvsem pri pripravi demonstracijskih programov. To ne pomeni, da na ta način ne moremo izdelati večjega projekta, vendar se moramo zavedati omejitev. Predvsem se omejitve pokažejo pri večjih projektih ali ko gre za uporabo IDE ali avtomatiziranih orodij (generiranje kode iz UML modela, ...).

Sorodna orodja in alternative

  • noweb (opisno programiranje za poljuben jezik)
  • inline dokumentacija (komentarji v kodi, pydoc, ...)
  • wiki

Last modified: Wednesday, 10 August 2011, 10:21 AM