This is my first Haskell skript. An enumeration function called fusion, i. e. the Cantor pairing function, and the inverse called split: -- fusion f :: (Fractional a) ⇒ a → a → a f x y = (1 / 2) ∗ (x + y) ∗ (x + y + 1) + y -- split s :: (RealFrac a, Floating a) ⇒ a → (a, a) s z = (x , y) where j = getJ z y = z − (auxF j ) x =j −y -- auxiliary functions auxF :: (Fractional a) ⇒ a → a auxF j = (1 / 2) ∗ j ∗ (j + 1) getJ :: (Num a1 , RealFrac a, Floating a) ⇒ a → a1 getJ z = w where q = (−1 / 2) + sqrt (1 / 4 + 2 ∗ z ) w = fromInteger (truncate q) -------------------------------------------------------------------- Beispiel: Welches Zahlenpaar repraesentiert die Zahl 17? ----- Dazu bestimmt man zunaechst eine Zahl j, die die groesste --- Zahl ist, fuer die gilt auxF(j) kleiner gleich 17. Das --- laesst sich am einfachsten durch Ausprobieren ermitteln. --- Dabei hilft die Wertetabelle von auxF(j): ----j 1 2 3 4 5 6 --auxF(j) 1 3 6 10 15 21 ----- Damit ergibt sich j zu 5. ----- Dann ist y = 17 - auxF(j) = 17 - f(5) = 17 - 15 = 2. --- Und x = j - y = 5 - 2 = 3. ----- Also ist <3,2> = 17. ------------------------------------------------------------------ 1