Haskell

Nemrég kezdtem el tanulni ezt a nyelvet, eléggé szokatlan nekem, bár nagyon tetszik. GHCI-ben próbálgatok apróságokat.
Ha ezt a sort beírom:
let fib n = if n < 1 then 1 else fib(n-1) + fib(n-2),
majd kiadom pl. a fib 6 parancsot, kiírja hogy 21. Ha viszont a fib :: Int -> Int rekurzív függvényt így definiálom:
let fib n = if n == 1 then 1 else fib(n-1) + fib(n-2),
akkor akármit beírok, "*** Exception: stack overflow" üzenet fogad. Nincs tippem sem, miért van ez a különbözőség. Gondolom másképp értékelődik ki a két definíció, de mi lényegi a különbség?

-------------------
2.6.17-gentoo-r4

Hozzászólások

Kösz, kezdem érteni. Az lenne még a kérdésem, hogy sql (lehetőleg mysql) adatbázist kezelő működő modult tudtok haskellhez? A htoolkit hsql-jét próbáltam, de sehogy se működött, mondjuk a csomagot még tesztelik gentoon. Azt írja a ghci, hogy "it is not a module in the current program, or in any known package". Próbáltam a programomba írni, import és module parancsokkal (a .hi file nevével is és a modul nevével is), de sehogy se ment. Nagyon furcsa, amit a ghci csinál:


Prelude> :add /usr/lib/hsql-mysql-1.7/ghc-6.4.1/Database/HSQL/MySQL.hi
Could not find module `/usr/lib/hsql-mysql-1.7/ghc-6.4.1/Database/HSQL/MySQL.hi':
  use -v to see a list of the files searched for
  (one of the roots of the dependency analysis)
Prelude>

-v kapcsolóval:


Prelude> :add /usr/lib/hsql-mysql-1.7/ghc-6.4.1/Database/HSQL/MySQL.hi
*** Chasing dependencies:
Could not find module `/usr/lib/hsql-mysql-1.7/ghc-6.4.1/Database/HSQL/MySQL.hi':
  locations searched:
    /usr/lib/hsql-mysql-1/7/ghc-6/4/1/Database/HSQL/MySQL/hi.hs
    /usr/lib/hsql-mysql-1/7/ghc-6/4/1/Database/HSQL/MySQL/hi.lhs
  (one of the roots of the dependency analysis)
Prelude>

A file-t átmásoltam a ghc import dirjébe, az eredmény ugyanez. Azt nem értem, miért cseréli ki a pontokat / jelekre. Ha átnevezem .hs-re, akkor pedig lexical error, gondolom forrást vár(na).
A package.conf -ban benne van a Database.HSQL.MySQL, mégse megy sehogyse... más modult pedig simán be tudok tölteni.

-------------------
2.6.17-gentoo-r4

Amúgy nagyon jól dokumentált, idáig csak 2 dolgot nem találtam meg (sqlt nem számítva), azt hogy van-e ciklus, ill. lista/tömb n. elemét hogy kell kiíratni. Nem vagyok túl jól angolból, így bocs ha benne van a doksiban de nem vettem észre. Szal van-e valami for szerű akármi mint cben, és hogy íratom ki egy lista n. elemét? Persze rekurzióval mind2őt meg lehet oldani, de van rá beépített cucc?

-------------------
2.6.17-gentoo-r4

Kösz.
Ezt a jegyzetet már olvasgattam, ez volt az egyetlen magyar nyelvű amit megtaláltam, tetszik, bár lehetne részletesebb is. :) Közben gondolkodtam a lista n. elemének kiírásán, gondolom konkrét esetben azt is rekurzióval kell megcsinálni. Szeretnék, de sajnos még nem járok egyetemre, remélem jövőre fogok. :)

-------------------
2.6.17-gentoo-r4

Vmi opengl tutorialt nem tudtok? haskell.org-on van egy, de az nagyon régi és nem működik semmi amit az alapján próbálok. GHC-be bele van forgatva az opengl támogatás pedig.

-------------------
2.6.17-gentoo-r4

Kösz, megnézem. Bár ez c-s, de ha jól tudom lehet include-olni haskellbe. Találtam nemrég egy (angol) tutorialszerűséget, ami csak haskellben openglezik: http://www.tfh-berlin.de/~panitz/hopengl/skript.pdf, bár nem a legfrissebb és csak draft, kezdetnek sztem jó, aztán meg úgyis ott a haddock... Kipróbáltam a HTTP modult is, már le tudok szedni forrást süti és hibakezeléssel. :)
Eltére szeretnék menni fizikusnak.

-------------------
2.6.17-gentoo-r4

Közben a mysqlt sikerült belőnöm (import Database.HSQL.MySQL)

-------------------
2.6.17-gentoo-r4

Most kipróbáltam a Database.HSQL modult, de tudom használni a doksi alapján (más doksit/tutorialt kerestem, de nem találtam). Szinte mindegyik függvénynek egyik argmumentuma Connection tipusú (pl. disconnect :: Connection -> IO ()), vagy Statement tipusú. A leírás szerint (http://htoolkit.sourceforge.net/doc/hsql/Database.HSQL.html):
A Connection type represents a connection to a database, through which you can operate on the it. In order to create the connection you need to use the connect function from the module for your prefered backend.
The Statement type represents a result from the execution of given SQL query.

Ezek számomra semmi konkrétat nem jelentenek. Nem is értem honnan lenne nekem Statement vagy Connection tipusú akármim... Számomra úgy lenne logikus hogy a visszatérési érték lenne Statement vagy ilyesmi és az argmumentumok char/string tipusúak.

-------------------
2.6.17-gentoo-r4