Haskell

Neue Frage »

Auf diesen Beitrag antworten »
neuling96 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?
 
Auf diesen Beitrag antworten »
neuling96 RE: Haskell

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

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

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

Auf diesen Beitrag antworten »
Karlito

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
Auf diesen Beitrag antworten »
neuling96

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
 
Auf diesen Beitrag antworten »
Karlito

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
Auf diesen Beitrag antworten »
neuling96

Besten Dank!!
Hat alles funktioniert
Auf diesen Beitrag antworten »
neuling96

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?
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »