Ich versuche, eine Glocke Nummer Finder + Summierung in Haskell zu implementieren. Ich bin ziemlich sicher, dass meine Methoden korrekt sind, aber ich habe Probleme mit einigen Fehlern zur Kompilierzeit. Meine aktuelle Fehlermeldung lautet:Haskell Implementierung von Bell-Nummern
[1 of 1] Compiling Main (survey2.hs, survey2.o)
survey2.hs:5:14:**
Expected a constraint, but ‘Integer’ has kind ‘*’
In the type signature for ‘binomial’:
binomial :: (Integer, Integer) => Integer
survey2.hs:15:12:
Expected a constraint, but ‘Integer’ has kind ‘*’
In the type signature for ‘bellSum’: bellSum :: Integer => Integer**
Ich bin total neu und neu zu funktionalen Sprachen im Allgemeinen Haskell. Aufgrund dieses Fehlers habe ich versucht, meine "Funktionsdefinitionen" (oder wie immer man sie in Haskell nennt) zu ändern, aber ich verursache einfach mehr Fehler.
Das Endziel des Programms ist, die Summe der Glockennummern 0-9 auszudrucken.
factorial n
| n <= 1 = 1
| otherwise = n * factorial(n-1)
binomial :: (Integer, Integer) => Integer
binomial n k
| k > n = 0
| k < 0 = 0
| otherwise = factorial(n)/factorial(n-k) * factorial(k)
bell n
| n <= 1 = 1
| otherwise = sum [ binomial (n-1, k-1) * bell (k-1) | k<-[0..n-1] ]
bellSum :: Integer => Integer
bellSum n = sum [ bell(k) | k<-[0..n] ]
main = bell(9 :: Integer)
Das Symbol für einen Funktionstyp ist '->', nicht '=>'. '=>' ist für Typklassenbeschränkungen (von denen ich vermute, dass Sie noch nichts darüber gelernt haben). – luqui
Und eine Definition für eine Funktion "(Integer, Integer) -> Integer" sieht aus wie "binomial (n, k) = ...". Die eine, die Sie haben, entspricht einer Integer -> Integer -> Integer-Funktion (die in Haskell ein viel häufigeres Muster ist). – luqui
[LYAH] (http://learnyouahaskell.com/) wird dringend empfohlen. – luqui