doc-src/Codegen/Thy/document/Program.tex
changeset 31544 19b77b1de188
parent 31254 03a35fbc9dc6
child 31848 e5ab21d14974
equal deleted inserted replaced
31543:5bef6c7cc819 31544:19b77b1de188
   344 \hspace*{0pt}datatype nat = Zero{\char95}nat | Suc of nat;\\
   344 \hspace*{0pt}datatype nat = Zero{\char95}nat | Suc of nat;\\
   345 \hspace*{0pt}\\
   345 \hspace*{0pt}\\
   346 \hspace*{0pt}type 'a semigroup = {\char123}mult :~'a -> 'a -> 'a{\char125};\\
   346 \hspace*{0pt}type 'a semigroup = {\char123}mult :~'a -> 'a -> 'a{\char125};\\
   347 \hspace*{0pt}fun mult (A{\char95}:'a semigroup) = {\char35}mult A{\char95};\\
   347 \hspace*{0pt}fun mult (A{\char95}:'a semigroup) = {\char35}mult A{\char95};\\
   348 \hspace*{0pt}\\
   348 \hspace*{0pt}\\
   349 \hspace*{0pt}type 'a monoid = {\char123}Program{\char95}{\char95}semigroup{\char95}monoid :~'a semigroup,~neutral :~'a{\char125};\\
   349 \hspace*{0pt}type 'a monoid = {\char123}semigroup{\char95}monoid :~'a semigroup,~neutral :~'a{\char125};\\
   350 \hspace*{0pt}fun semigroup{\char95}monoid (A{\char95}:'a monoid) = {\char35}Program{\char95}{\char95}semigroup{\char95}monoid A{\char95};\\
   350 \hspace*{0pt}fun semigroup{\char95}monoid (A{\char95}:'a monoid) = {\char35}semigroup{\char95}monoid A{\char95};\\
   351 \hspace*{0pt}fun neutral (A{\char95}:'a monoid) = {\char35}neutral A{\char95};\\
   351 \hspace*{0pt}fun neutral (A{\char95}:'a monoid) = {\char35}neutral A{\char95};\\
   352 \hspace*{0pt}\\
   352 \hspace*{0pt}\\
   353 \hspace*{0pt}fun pow A{\char95}~Zero{\char95}nat a = neutral A{\char95}\\
   353 \hspace*{0pt}fun pow A{\char95}~Zero{\char95}nat a = neutral A{\char95}\\
   354 \hspace*{0pt} ~| pow A{\char95}~(Suc n) a = mult (semigroup{\char95}monoid A{\char95}) a (pow A{\char95}~n a);\\
   354 \hspace*{0pt} ~| pow A{\char95}~(Suc n) a = mult (semigroup{\char95}monoid A{\char95}) a (pow A{\char95}~n a);\\
   355 \hspace*{0pt}\\
   355 \hspace*{0pt}\\
   361 \hspace*{0pt}fun mult{\char95}nat Zero{\char95}nat n = Zero{\char95}nat\\
   361 \hspace*{0pt}fun mult{\char95}nat Zero{\char95}nat n = Zero{\char95}nat\\
   362 \hspace*{0pt} ~| mult{\char95}nat (Suc m) n = plus{\char95}nat n (mult{\char95}nat m n);\\
   362 \hspace*{0pt} ~| mult{\char95}nat (Suc m) n = plus{\char95}nat n (mult{\char95}nat m n);\\
   363 \hspace*{0pt}\\
   363 \hspace*{0pt}\\
   364 \hspace*{0pt}val semigroup{\char95}nat = {\char123}mult = mult{\char95}nat{\char125}~:~nat semigroup;\\
   364 \hspace*{0pt}val semigroup{\char95}nat = {\char123}mult = mult{\char95}nat{\char125}~:~nat semigroup;\\
   365 \hspace*{0pt}\\
   365 \hspace*{0pt}\\
   366 \hspace*{0pt}val monoid{\char95}nat =\\
   366 \hspace*{0pt}val monoid{\char95}nat = {\char123}semigroup{\char95}monoid = semigroup{\char95}nat,~neutral = neutral{\char95}nat{\char125}\\
   367 \hspace*{0pt} ~{\char123}Program{\char95}{\char95}semigroup{\char95}monoid = semigroup{\char95}nat,~neutral = neutral{\char95}nat{\char125}~:\\
   367 \hspace*{0pt} ~:~nat monoid;\\
   368 \hspace*{0pt} ~nat monoid;\\
       
   369 \hspace*{0pt}\\
   368 \hspace*{0pt}\\
   370 \hspace*{0pt}fun bexp n = pow monoid{\char95}nat n (Suc (Suc Zero{\char95}nat));\\
   369 \hspace*{0pt}fun bexp n = pow monoid{\char95}nat n (Suc (Suc Zero{\char95}nat));\\
   371 \hspace*{0pt}\\
   370 \hspace*{0pt}\\
   372 \hspace*{0pt}end;~(*struct Example*)%
   371 \hspace*{0pt}end;~(*struct Example*)%
   373 \end{isamarkuptext}%
   372 \end{isamarkuptext}%
   965 \begin{isamarkuptext}%
   964 \begin{isamarkuptext}%
   966 \isatypewriter%
   965 \isatypewriter%
   967 \noindent%
   966 \noindent%
   968 \hspace*{0pt}strict{\char95}dequeue ::~forall a.~Queue a -> (a,~Queue a);\\
   967 \hspace*{0pt}strict{\char95}dequeue ::~forall a.~Queue a -> (a,~Queue a);\\
   969 \hspace*{0pt}strict{\char95}dequeue (AQueue xs []) =\\
   968 \hspace*{0pt}strict{\char95}dequeue (AQueue xs []) =\\
   970 \hspace*{0pt} ~let {\char123}\\
   969 \hspace*{0pt} ~(let {\char123}\\
   971 \hspace*{0pt} ~~~(y :~ys) = rev xs;\\
   970 \hspace*{0pt} ~~~(y :~ys) = rev xs;\\
   972 \hspace*{0pt} ~{\char125}~in (y,~AQueue [] ys);\\
   971 \hspace*{0pt} ~{\char125}~in (y,~AQueue [] ys) );\\
   973 \hspace*{0pt}strict{\char95}dequeue (AQueue xs (y :~ys)) = (y,~AQueue xs ys);%
   972 \hspace*{0pt}strict{\char95}dequeue (AQueue xs (y :~ys)) = (y,~AQueue xs ys);%
   974 \end{isamarkuptext}%
   973 \end{isamarkuptext}%
   975 \isamarkuptrue%
   974 \isamarkuptrue%
   976 %
   975 %
   977 \endisatagquote
   976 \endisatagquote