\begin{vdm_al} class MergeSort issubclassof Sorter
operations
public Sort: seqofint ==> seqofint
Sort(l) == return MergeSorter(l)
functions
MergeSorter: seqofreal -> seqofreal
MergeSorter(l) == cases l:
[] -> l,
[e] -> l, others -> let l1^l2 inset {l} bestabs (len l1 - len l2) < 2 in let l_l = MergeSorter(l1),
l_r = MergeSorter(l2) in Merge(l_l, l_r) end measureLen;
Len: seqofreal -> nat Len(list) == len list;
\end{vdm_al}
Although the \texttt{Merge} function takes sequence of integers it has on purpose been
limited by the pre-condition "artificially"to only work for natural numbers in order to
illustrate how the debugger can catch such pre-condition violations when called with
negative numbers.
\begin{vdm_al} Merge: seqofint * seqofint -> seqofint Merge(l1,l2) == cases mk_(l1,l2):
mk_([],l),mk_(l,[]) -> l, others -> ifhd l1 <= hd l2 then
[hd l1] ^ Merge(tl l1, l2) else
[hd l2] ^ Merge(l1, tl l2) end preforall i insetinds l1 & l1(i) >= 0 and forall i insetinds l2 & l2(i) >= 0 measureLen;
Len: seqofint * seqofint -> nat Len(list1,list2) == len list1 + len list2;
end MergeSort
\end{vdm_al}
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.