Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Haskell (http://www.informatikerboard.de/board/thread.php?threadid=2226)


Geschrieben von neuling96 am 18.04.2015 um 12:26:

  Haskell

Vorweg, ich beschäftige mich zum ersten mal mit Haskell und hier bereits das erste Problem

> 0:[1,2,3]
[0,1,2,3]
Soweit klar


> 'a'unglücklich 'b':['c'])
"abc"

Aber wieso ergibt das ein String?
Ich hätte
> 'a'unglücklich 'b':['c'])
[a,b,c]
erwartet

:t (smile
(smile :: a -> [a] -> [a]

Wieso ist der Cons- Operator mehrstellig?



Geschrieben von neuling96 am 18.04.2015 um 12:28:

  RE: Haskell

da ist vorher was schief gelaufen verwirrt
Zitat:
Original von neuling96

> 'a': ('b':['c'])
[a,b,c]
erwartet

:t (: )
(: ) :: a -> [a] -> [a]




Geschrieben von Karlito am 18.04.2015 um 13:09:

 

Im Prinzip ist ein String nichts anderes als ein char-array... In C zum Beispiel ist ein String ein char-array, was mit dem Zeichen \0 beendet wird. Ich nehme an, dass haskell einfach Char-Array als String interprektiert.

Gruß,

Karlito



Geschrieben von neuling96 am 18.04.2015 um 15:39:

 

Danke für den Hinweis

Wenn ich in den GHCI folgendes eintippe

succ :: Int -> Int

nimmt er das nicht an.

Weißt du wieso nicht?

Selbst Funktionen wie f x = x + 1, erst mit let f x = x + 1 wird die Funktion akzeptiert



Geschrieben von Karlito am 19.04.2015 um 15:45:

 

Ghci scheint an dieser stelle einfach etwas anders zu funktionieren. Was Du machen kannst, ist eine Datei anzulegen, in der Du die Funktionen wie in der Lehrveranstaltung definierst. Also beispielsweise:
code:
1:
2:
3:
4:
nachf :: Integer -> Integer
nachf n = n + 1


Das legst du in meinefkt.hs ab und öffnest es in ghci per
code:
1:
:load meinefkt.hs
. Danach ist die Funktion verfügbar. Ansonsten einfach die let-Notation verwenden.

Übrigens ist succ bereits in Haskell definiert. Dadurch kommt es zu einem Namenskonflikt:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
Prelude> :load test.hs
[1 of 1] Compiling Main             ( test.hs, interpreted )
Ok, modules loaded: Main.
*Main> succ
succ  succ
*Main> succ 5

<interactive>:4:1:
    Ambiguous occurrence `succ'
    It could refer to either `Main.succ', defined at test.hs:2:1
                          or `Prelude.succ',
                             imported from `Prelude' at test.hs:1:1
                             (and originally defined in `GHC.Enum')


Ich habe nicht recherchiert wie man den auflösen kann, aber es gibt wohl soetwas wie Scopes. Das Einfachste ist also einfach die Namenskonflikte zu vermeiden.

Gruß,

Karlito



Geschrieben von neuling96 am 21.04.2015 um 19:16:

 

Besten Dank!!
Hat alles funktioniert



Geschrieben von neuling96 am 14.05.2015 um 21:01:

 

foldl :: (a -> b -> a) -> a -> [b] -> a

(.) :: (b -> c) -> (a -> b) -> a -> c
(.) f g = \x -> f (g x)

compose = foldl (.) id

was ich hier nicht verstehe ist, dass von der funktion id der typ a->a ist aber in foldl wird nicht (a->a) oder ein wert a erwartet an der stelle id

wo genau liegt mein denkfehler?


Forensoftware: Burning Board, entwickelt von WoltLab GmbH