Haskell'de zil numarası bulucu + toplamı uygulamaya çalışıyorum. Yöntemlerimin doğru olduğundan eminim, fakat derleme zamanında bazı hatalarla ilgili problem yaşıyorum. Benim şu anki hata iletisim:Haskell Bell Numaralarının Uygulanması
[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**
Genelde işlevsel dillere haskell ve yeni dillerden tamamen yeniyim. Bu hataya dayanarak, "işlev tanımlarımı" değiştirmeyi denedim (ya da onları Haskell'de aradığınızda), ama daha fazla hataya neden oluyor gibi görünüyorum.
Programın son hedefi, 0-9 arasındaki zil sayısının toplamını yazdırmaktır.
bu tutarlı olmadığını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)
Bir işlev türü için sembol '->' değil, '=>' dır. '=>' typeclass kısıtlamaları için (ki daha önce öğrenmediğinizi tahmin ediyorum). – luqui
Ve '(Tamsayı, Tamsayı) -> Tamsayı 'işlevi için bir tanım binom (n, k) = ...' gibi görünüyor. Sahip olduğunuz bir "Tamsayı -> Tamsayı -> Tamsayı" işlevine karşılık gelir (haskell içinde, çok daha yaygın bir modeldir). – luqui
[LYAH] (http://learnyouahaskell.com/) şiddetle tavsiye edilir. – luqui