Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Haskell » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Zum Ende der Seite springen Haskell
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
neuling96
unregistriert
Haskell Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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?
18.04.2015 12:26
neuling96
unregistriert
RE: Haskell Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

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

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

18.04.2015 12:28
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
18.04.2015 13:09 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
18.04.2015 15:39
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
19.04.2015 15:45 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Besten Dank!!
Hat alles funktioniert
21.04.2015 19:16
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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?
14.05.2015 21:01
Baumstruktur | Brettstruktur
Gehe zu:
Informatiker Board » Themengebiete » Praktische Informatik » Haskell