www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

Xan

Gepostet:
22.07.2012 20:44

unter Verwendung eines Faltungs-Operators und eines Lambda-Ausdrucks eine Zahl in Binärdarstellung in ihre Dezimaldarstellung umwandeln  

Hier kann man dezimale Zahlen in binäre Zahlen umwandeln aber wie kann man unter Verwendung eines Faltungs-Operators und eines Lambda-Ausdrucks eine
Funktion bintodec, die eine Zahl in Binärdarstellung in ihre Dezimaldarstellung umwandelt. Darau kann ich nicht kommen...



dez2bin 0 = []
deztobin n = deztobin(n `div` 2) ++ [n `mod` 2]
Zum Seitenanfang    
 
Landei

Gepostet:
23.07.2012 09:20

   
Meinst du sowas?


bin2dec = foldl (\\n d ->n*2+d) 0

bin2dec [1,0,1,1]
-- 11
Zum Seitenanfang    
 
Xan

Gepostet:
23.07.2012 20:11

   
Perfekt. Danke schön
Zum Seitenanfang    
 
Landei

Gepostet:
24.07.2012 10:32

   
Nebenbei bemerkt gibt es auch die \"umgekehrte\" Operation zu einem Fold, nämlich unfoldr. Allerdings muss man ein Maybe zurückgeben, damit die Funktion weiß, wann die Liste \"fertig\" ist:


import Data.List

dez2bin = reverse . unfoldr f where
f 0 = Nothing
f n = Just (n `mod` 2, n `div` 2)


Deine Version ist übrigens durch das dauernde (++) ziemlich ineffizient. In solchen Fällen ist es besser, vorne anzuhängen und einmal am Ende alles umzudrehen. Das senkt den Aufwand von O(n²) auf O(n).
Zum Seitenanfang