Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   String unter Haskell bearbeiten (https://www.delphipraxis.net/60737-string-unter-haskell-bearbeiten.html)

GLaforge 11. Jan 2006 19:32


String unter Haskell bearbeiten
 
Hi,
habe folgendes Problem. Ich studiere Informatik (1.Semester) und wir benutzen die funktionale Programmiersprache Haskell (bzw.Helium). Ich muss gestehen, dass ich mit Delphi mehr anfangen kann als mit Haskell jedoch muss man da beim Studium durch. Nun zu meinem Problem. Ich soll ein Eingabewort (Typ String) bearbeiten. Es handelt sich dabei um eine sehr simple Verschlüsselung. Sie funktioniert wie folgt. An gerader Position eines Zeichen im Wort soll dieses um 1 verringert (über ord Zeichen liefert Ascii-Wert) an ungerader um 1 erhöht werden. Mir ist soweit alles bekannt nur weis ich nicht wie ich im String eine ungerade und ungerade Position unter Haskell ermittle.
Zur Erklärung: Die Positionen in einer Zeichenkette werden mit 0 beginnend von links durchnummeriert,
d.h. das erste Zeichen in einer Zeichenkette (eines Wortes) besitzt die Position 0.
Ich wäre sehr dankbar, wenn sich einer meldet der Ahnung von Haskell hat.
Vielen dank schonmal.

glkgereon 11. Jan 2006 19:38

Re: String unter Haskell bearbeiten
 
gibt es nicht sowas wie mod?
oder direkt Odd()?

Also ich habe keine Ahnung von Haskell, aber sowas wird es ja wohl geben, hoffe ich ^^

Die Umwandlung Char->Int->Char scheint ja nicht das Problem zu sein...

und dann is der Code relativ simpel:
Delphi-Quellcode:
for i:=0 to Length(Input)-1 do
  if i mod 2 =0 then
    Input[i]:=Chr(Ord(Input[i])-1)
  else
    Input[i]:=Chr(Ord(Input[i])+1);

GLaforge 11. Jan 2006 19:47

Re: String unter Haskell bearbeiten
 
die idee über length zu gehen hatte ich auch, das Problem length verlangt eine liste und keinen string. Man könnte es konvertieren aber aus meiner sicht zu aufwendig. Aber was ist ODD - kenn ich garnicht. Ich weis, dass das Problem sehr speziell ist und eigentlich auch nur jemand beantworten kann der Info o.ä studiert, da die funktionalen Programmiersprachen im Alltag eher eine untergeordnete Rolle spielen.

glkgereon 11. Jan 2006 19:52

Re: String unter Haskell bearbeiten
 
Zitat:

Zitat von GLaforge
die idee über length zu gehen hatte ich auch, das Problem length verlangt eine liste und keinen string. Man könnte es konvertieren aber aus meiner sicht zu aufwendig. Aber was ist ODD - kenn ich garnicht. Ich weis, dass das Problem sehr speziell ist und eigentlich auch nur jemand beantworten kann der Info o.ä studiert, da die funktionalen Programmiersprachen im Alltag eher eine untergeordnete Rolle spielen.

Also ich habe mich grade mal an dem ersten Kapitel eines Haskell-Tutorials versucht. Rein aus Interesse da ich von dieser Sprache zwar schon mal was gehört hatte, aber keine Ahnung hatte wie die in etwa aussieht.
Ich verstehe eigentlich nichts. :gruebel:
Von daher kann ich dir bei dem String/Listen Problem (vielleicht bisher *die hoffnung stirbt zuletzt*) nicht helfen...

Odd ist in Pascal eine Funktion, welche Überprüft ob die gegebene Zahl gerade (oder ungerade?) ist.
Quellcode wahrscheinlich wie folgt:
Delphi-Quellcode:
function Odd(Val: Integer):Boolean;
begin
  Result:=(Val mod 2)=0; //oder eben ...=1;
end;

GLaforge 11. Jan 2006 19:58

Re: String unter Haskell bearbeiten
 
Hab gerade die Funktion Odd auch bei Haskell entdeckt, habe aber immernoch das Problem dass ich nicht weiss an welcher Position den Code sich gerade befindet. Dank dir dennoch für deine Mühen, und bitte verschwende deine wertvolle Zeit nicht dür Haskell ;-) Es hilft ein wirklich erst im Studium, da unter Haskell sehr streng auf Typtreue etc. Wert gelegt wird.

tigerman33 11. Jan 2006 20:19

Re: String unter Haskell bearbeiten
 
Das erste was mir dazu einfällt wäre der rekursive Ansatz:
Code:
versch :: String -> String
versch "" = ""
versch s = versch' 0 s
  where versch' :: Int -> String -> String
        versch' _ [] = ""
        versch' a (s:ss) = if a `mod` 2 == 0 then
                             (chr(ord(s) - 1)):versch' (a+1) ss else
                             (chr(ord(s) + 1)):versch' (a+1) ss
Aber mit ein bisschen mehr Denkarbeit ließe sich da sicher auch mit Listenkomprehension was machen. :)

//edit:
Oh, hab genau umgekehrt verschlüsselt. Behoben.

tigerman33 14. Jan 2006 09:30

Re: String unter Haskell bearbeiten
 
Mir war mal ein bisschen langweilig, also hier jetzt auch noch der Ansatz mit Listenkomprehension:
Code:
versch s = [chr(ord(s!!x) + delta(x))|x<-[0..(length s) - 1]]
  where delta x
          | even x = -1
          | otherwise = 1


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz