Ich habe eine Funktion zur Umwandlung von Binär in Dezimal in Haskell implementiert und arbeite derzeit an einer Funktion, die eine Dezimalzahl in einen Binärwert umwandeln würde. (Mir ist bewusst, dass diese Funktionalitäten irgendwo verfügbar sind, obwohl sie nicht Teil von Prelude.hs sind)
Ich habe den folgenden Code für eine C-ähnliche prozedurale Sprache erstellt, habe jedoch Schwierigkeiten, ihn in das funktionale Paradigma zu überführen.
while (n > 0)
{
if (n % 2 == 1)
str = str + "1";
else
str = str + "0";
n = n / 2;
}
Ich habe mich erst kürzlich in die funktionale Programmierung in Haskell gewagt, also bin ich ziemlich neu in der funktionalen Denkweise. Ich habe versucht, das oben Genannte sowohl mit Rekursion als auch mit Listenverständnis umzusetzen, bin mir aber nicht sicher, wie ich die Wachen und die Logik richtig platzieren soll, da dies mehrere Bedingungen beinhaltet. Ich benutze eine Int
Liste, um die einzelnen Binärziffern zu speichern.
--Decimal to binary
toBin:: Int -> [Int]
toBin 0 = [0]
toBin n | (n % 2 == 1) =
|(n % 2 == 0) =
Ich habe verstanden, dass das obige Muster es dem Programm ermöglichen würde, entweder die Wache zu wählen und die Auswertung der Funktion zu beenden. Liege ich hier falsch?
Im Folgenden ist das, was ich mit primitiver Rekursion entwickelt habe, um eine beliebige Basis (kleiner als 10, anstelle der 2) in Dezimal umzuwandeln.
toDecimal :: [Int] -> Int
toDecimal [] = 0
toDecimal (x:xs) = (x * 2 ^(length xs)) + bin xs