Lahenduste esitamise tähtaeg on 19.12. Lahendused saata mailiga aadressil varmo@cs.ut.ee või nestra@cs.ut.ee (vastavalt sellele, kelle praktikumirühmas olete); kirja teemaks peab olema fpkodu3.
Seekord on ainult üks ülesanne, mille eest on võimalik saada kuni 10 punkti. Hilinenud lahenduste korral väheneb punktisumma 20% iga hilinenud nädala kohta. Näiteks kui lahendus on väärt 10 punkti, aga jõuab meieni 21.12 (s.o kaks päeva hiljem), siis on tegelik punktisumma 10 * 0.8 = 8.
Lahendus tuleb vormistada ühe Haskelli failina. Faili nimi peab olema FPKodu3.hs ning seal defineeritava mooduli nimi FPKodu3. Faili algusse tuleb lisada kommentaaridena kõigi rühmaliikmete nimed (rühmas võib olla maksimaalselt 4 liiget, kusjuures kõigil peab olema sama praktikumijuhendaja) ja meiliaadressid. Kõigi alamülesannete puhul peavad muutujanimed ja nende tüübid vastama täpselt ülesandes nõutule. Lahendused peavad olema loetavad ja piisavalt kommenteeritud (sh abifunktsioonide mõte peab olema selgelt välja toodud).
Näiteks (FPKodu3.hs):
module FPKodu3 ( Player (..), showMove, readMove, initPosition, getPlayer, Move (), Position, move, allMoves, value ) where --------------------------------------------------------------------- -- FPKodu3.hs -- Funktsionaalprogrammeerimise meetod - 3. koduülesande lahendus -- -- Autorid: -- Jaan Tatikas (tatikas@ut.ee) -- Salomon Vesipruul (salomon@ut.ee) ---------------------------------------------------------------------
Eesmärgiks on kirjutada Haskellis maleprogramm, mis suudaks mängida malet nii suvalisest etteantud korrektsest maleseisust alates kui ka standardsest algseisust alates.
Kellel vaja, võib veebist leida täieliku malereeglite kogu. Meie juhul puutuvad asjasse käigureeglid ja reeglid mängu tulemuse üle otsustamiseks lõppseisu põhjal. Arvesse pole vaja võtta reeglit kolmekäigulise seisukorduse kohta ja 50 käigu reeglit.
Kasutajaga suhtlemine käib
Xboardi/Winboardi abil.
Xboard tuleb konfigureerida nii, et algseisu määramiseks kasutaks ta
setboard-käsku. Miniversioonis on Xboardi konfigureerimine ja
temaga suhtlemine juba realiseeritud peamoodulis
Main
; sellest tasemest
põhimõtteliselt piisab ja seda moodulit pole vaja täiendada
(aga võib, kui on soovi; vajadusel tutvuge veebis
Xboardiga suhtlemise
protokolliga).
Mooduli FPKodu3
skelett on ette
antud ja seda tuleb järgida; seal on ka täpsemalt kirjas, mida tuleb
teha. Lisaks juba eelpool kirjeldatud moodulile
Main
on ette antud moodulid
Sort
,
Square
,
PiecesAndPlayers
,
Position
,
Result
,
Minimax
,
ListBoard
,
ArrayBoard
,
FunBoard
, mille sisu kohta leiate
täpsemat infot neis failides olevatest kommentaaridest.
Seega on Teie ülesandeks ainult malekäikude ja seisuhinnangu
defineerimine. See tuleks teha nii, et programm käike meeletult kaua ei
mõtleks; normiks võiks olla, et kiirel arvutil peab olema
võimalik GHC-ga kompileerimisel saadud programmiga ajaviiteks malet
mängida, kui ta vaatab 2 täiskäiku (st kummagi mängija 2
käiku ehk 4 poolkäiku) ette. See poolkäikude arv antakse
parameetrina funktsiooni analyze
argumendiks moodulis
Main
.
Xboardi all käivitamiseks ongi peamoodul Main
failis
Chess.hs
. Kui soovite, et Xboard
Teie programmi runhugs
iga jooksutaks, tuleb avada selle faili
alguses välja kommenteeritud rida ning anda käsurealt käsk
xboard -fcp ./Chess.hs
GHC-ga jooksutamiseks tuleb programm kompileerida käsuga
ghc -fglasgow-exts --make -o Chess Chess
(eelpoolmainitud rida peab olema välja kommenteeritud), ja tulemuseks
olev masinkoodis programm Chess
Xboardiga välja kutsuda
samamoodi kui enne (Chess.hs
asemel tuleb panna muidugi
Chess
). Kui soovite teminaliaknast näha, milliseid
käske Xboardi ja Teie programmi vahel saadetakse, siis andke lisaks
-debug-võti:
xboard -fcp ./Chess -debug
Xboard saadab algseisud programmile FEN-notatsioonis (Forsythe-Edwards Notation). Kui teil on olemas FEN-kujul algseisude fail (nt examples.fen), siis saate koheselt sealt laadida esimese seisu kasutades -lpf võtit:
xboard -fcp ./Chess -lpf examples.fen
Selles failis on kuus seisu, millest esimeses kolmes on valgel 2-käiguline, viimases kolmes aga 3-käiguline matt. Nende ülesleidmine võiks olla Teie töö teetähisteks.
Kuigi moodul FPKodu3
peaks kasutama ainult standard-Haskelli
ja kompileeruma nii Hugsi kui GHC-ga ilma realisatsioonilaiendusi kasutamata,
tuleb kogu süsteemi tervikuna kompileerimiseks lisada Hugsi puhul lipp
-98
ja GHC puhul lipp -fglasgow-exts
, kui Te
baseerute etteantud moodulitel Main
ja Minimax
, sest need kasutavad
võtteid, mis standard-Haskelli ei kuulu (see
Minimax
pole sama mis samanimeline
loengus käsitletu).
Loomulikult võite töös kasutada kõiki Haskelli
standardteeke. Töö esitamisel saatke aga palun ainult fail
FPKodu3.hs
. Kõik siianiviidatud failid saate
tõmmata endale korraga zip-kujul.
Windowsi all tundub, et runhugs
ja Winboard ei saa
omavahel suhtlemisega hakkama ja kogu standardsisend programmile on ilma
reavahetussümboliteta. Parimaks lahenduseks on kasutada Hugsi asemel
GHC-d. Kompileerimiseks sobib
näiteks käsurida:
ghc.exe -fglasgow-exts -o chess.exe Chess.hs