Home
 

Abstrakte Datentypen

Abstrakte Datentypen

= verberge (verbiete Benutzung von) Konstruktion der Typelemente

Lösung in Haskell: Konventionell, nämlich:

  • verpacke Typdefinition + einschlägige Operationsdefinitionen in Modul
  • exportiere nur das, was der Anwender benutzen soll, also zB Typ- und Operationsbezeichner in "`Exportliste"'.

$\Rightarrow$ Seite [*]

Haskells Modulkonzept wird von verschiedenen Hugs-Versionen nicht (vollständig) unterstützt; umgekehrt bieten Gofer/Hugs Systemeigene (nicht-Haskell) Syntax für abstrakte Datentypen.

 


-----------------------------ADT module
module Searchtree(STree, listToSTree, sTreeToList) where


data Ord a => STree a = Node a (STree a) (STree a) | Nil


insertSTree :: Ord a => a -> STree a -> STree a
insertSTree x Nil = Node x Nil Nil
insertSTree x (Node y left right)
| x<=y = Node y (insertSTree x left) right
| otherwise = Node y left (insertSTree x right)


listToSTree :: Ord a => [a] -> STree a
listToSTree = foldr insertSTree Nil


sTreeToList :: Ord a => STree a -> [a]
sTreeToList Nil = []
sTreeToList (Node x left right)
= (sTreeToList left) ++ [x] ++ (sTreeToList right)


-------------------client module (separate file)


module Main where
import Searchtree - improt complete export of Searchtree


-----------------------------use e.g.:


{-
Prelude> :l Main.hs
Reading file "Main.hs":
Reading file "Searchtree.hs":
Reading file "Main.hs":


Hugs session for:
/usr/local/share/hugs/lib/Prelude.hs
Searchtree.hs
Main.hs
Main> (sTreeToList.listToSTree) [1,-1,0,2,-2]
[-2, -1, 0, 1, 2]
Main> sTreeToList (insertSTree 2 Nil) -insertSTree is hidden!
ERROR: Undefined variable "insertSTree"
Main> sTreeToList Nil - constructors are hidden!
ERROR: Undefined constructor function "Nil"
-}



nextnextupuppreviouspreviouscontentscontents
Next:KlassenUp:Benutzerdefinierte Datentypen und TypklassenPrevious:Algebraische Datentypen
Ronald Blaschke
1998-04-19