Commit 4a85ae1b authored by partain's avatar partain

[project @ 1996-07-25 21:02:03 by partain]

Bulk of final changes for 2.01
parent 51c80c6c
--!!! conversions: Double <=> Rational/Integer things
--
main _
= [AppendChan stdout
(show r42 ++ "\n" ++
show nu42 ++ ", " ++
show de42 ++ "\n" ++
show nu42d ++ ", " ++
show de42d ++ "\n" ++
show s2 ++ ", " ++
show e2 ++ "\n" ++
show s ++ ", " ++
show e ++ "\n" )
]
import Ratio
main = putStr (show r42 ++ "\n" ++
show nu42 ++ ", " ++
show de42 ++ "\n" ++
show nu42d ++ ", " ++
show de42d ++ "\n" ++
show s2 ++ ", " ++
show e2 ++ "\n" ++
show s ++ ", " ++
show e ++ "\n" )
where
d42 :: Double
r42 :: Rational
......
--!!! basic Rational operations
--
main _
= [AppendChan stdout
import Ratio
main
= putStr
(-- Ratio Ints
show [i0a, i0b, i0c, i2a, i2b, im2a, im2b, i_pi, i_misc]
++ "\n"
......@@ -24,7 +26,6 @@ main _
-- ++ show []
-- ++ "\n"
)
]
where
i0a, i0b, i0c, i2a, i2b, im2a, im2b, i_pi, i_misc :: Ratio Int
......
--!!! test arithmetic operations from "Prelude" (gcd, ldm, etc.)
--
main _
= [AppendChan stdout
main
= let
minInt = minBound :: Int
maxInt = maxBound :: Int
in
putStr
(-- w/ Ints
show [
minInt, maxInt,
......@@ -62,7 +66,7 @@ main _
-- ToDo: more stuff
]
++ "\n"
)]
)
where
i0, i4, i4m, i6, i6m, i8, i8m :: Int
i0 = 0
......
--!!! test quot/rem/div/mod functions on Ints and Integers
--
main _
= [AppendChan stdout
main
= putStr
(-- w/ Ints and Integers
show (unzipWith div ints_list)
++ "\n"
......@@ -27,7 +27,7 @@ main _
++ "\n"
++ show (unzipWith law2 integers_list)
++ "\n"
)]
)
where
ints_list :: [(Int, Int)]
integers_list :: [(Integer, Integer)]
......
--!!! test RealFrac ops (ceiling/floor/etc.) on Floats/Doubles
--
main _
= [AppendChan stdout
main
= putStr
(-- {Float,Double} inputs, {Int,Integer} outputs
show ((map ceiling float_list) :: [Int])
++ "\n"
......@@ -43,7 +43,7 @@ main _
++ "\n"
++ show ((map properFraction double_list) :: [(Integer,Double)])
++ "\n"
)]
)
where
float_list :: [Float]
double_list :: [Double]
......
42.0000000
\ No newline at end of file
42.0000000
--!!! test simple Integer things
--
main _
= [AppendChan stdout (shows integer_list "\n")]
main
= putStr (shows integer_list "\n")
where
int_list :: [Int]
integer_list :: [Integer]
......
......@@ -14,7 +14,7 @@ random_numbers (s1,s2,s3)
-- partain: changed to cvt spaces into newlines (easier to see bugs)
main = appendChan stdout (map cvt (shows (take 1000 (random_numbers (9807, 65, 32975))) "\n")) exit done
main = putStr (map cvt (shows (take 1000 (random_numbers (9807, 65, 32975))) "\n"))
where
cvt ' ' = '\n'
cvt c = c
NoFibOneModuleCompileAndRun(arith009,)
-- a prefix minus precedence test
f :: Int -> Int -> Int -> Int
f x y z = - x * y ^ z
main = putStr (shows (f 5 2 3) "\n")
main _ = [AppendChan stdout (shows a "\n")]
import Array -- 1.3
infix 1 =:
(=:) a b = (a,b)
main = putStr (shows a "\n")
where
a :: Array Integer Integer
a = array (1,100) ((1 := 1) : [i := i * a!(i-1) | i <- [2..100]])
a = array (1,100) ((1 =: 1) : [i =: i * a!(i-1) | i <- [2..100]])
array (1, 100) [1 := 1, 2 := 2, 3 := 6, 4 := 24, 5 := 120, 6 := 720, 7 := 5040, 8 := 40320, 9 := 362880, 10 := 3628800, 11 := 39916800, 12 := 479001600, 13 := 6227020800, 14 := 87178291200, 15 := 1307674368000, 16 := 20922789888000, 17 := 355687428096000, 18 := 6402373705728000, 19 := 121645100408832000, 20 := 2432902008176640000, 21 := 51090942171709440000, 22 := 1124000727777607680000, 23 := 25852016738884976640000, 24 := 620448401733239439360000, 25 := 15511210043330985984000000, 26 := 403291461126605635584000000, 27 := 10888869450418352160768000000, 28 := 304888344611713860501504000000, 29 := 8841761993739701954543616000000, 30 := 265252859812191058636308480000000, 31 := 8222838654177922817725562880000000, 32 := 263130836933693530167218012160000000, 33 := 8683317618811886495518194401280000000, 34 := 295232799039604140847618609643520000000, 35 := 10333147966386144929666651337523200000000, 36 := 371993326789901217467999448150835200000000, 37 := 13763753091226345046315979581580902400000000, 38 := 523022617466601111760007224100074291200000000, 39 := 20397882081197443358640281739902897356800000000, 40 := 815915283247897734345611269596115894272000000000, 41 := 33452526613163807108170062053440751665152000000000, 42 := 1405006117752879898543142606244511569936384000000000, 43 := 60415263063373835637355132068513997507264512000000000, 44 := 2658271574788448768043625811014615890319638528000000000, 45 := 119622220865480194561963161495657715064383733760000000000, 46 := 5502622159812088949850305428800254892961651752960000000000, 47 := 258623241511168180642964355153611979969197632389120000000000, 48 := 12413915592536072670862289047373375038521486354677760000000000, 49 := 608281864034267560872252163321295376887552831379210240000000000, 50 := 30414093201713378043612608166064768844377641568960512000000000000, 51 := 1551118753287382280224243016469303211063259720016986112000000000000, 52 := 80658175170943878571660636856403766975289505440883277824000000000000, 53 := 4274883284060025564298013753389399649690343788366813724672000000000000, 54 := 230843697339241380472092742683027581083278564571807941132288000000000000, 55 := 12696403353658275925965100847566516959580321051449436762275840000000000000, 56 := 710998587804863451854045647463724949736497978881168458687447040000000000000, 57 := 40526919504877216755680601905432322134980384796226602145184481280000000000000, 58 := 2350561331282878571829474910515074683828862318181142924420699914240000000000000, 59 := 138683118545689835737939019720389406345902876772687432540821294940160000000000000, 60 := 8320987112741390144276341183223364380754172606361245952449277696409600000000000000, 61 := 507580213877224798800856812176625227226004528988036003099405939480985600000000000000, 62 := 31469973260387937525653122354950764088012280797258232192163168247821107200000000000000, 63 := 1982608315404440064116146708361898137544773690227268628106279599612729753600000000000000, 64 := 126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000, 65 := 8247650592082470666723170306785496252186258551345437492922123134388955774976000000000000000, 66 := 544344939077443064003729240247842752644293064388798874532860126869671081148416000000000000000, 67 := 36471110918188685288249859096605464427167635314049524593701628500267962436943872000000000000000, 68 := 2480035542436830599600990418569171581047399201355367672371710738018221445712183296000000000000000, 69 := 171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000, 70 := 11978571669969891796072783721689098736458938142546425857555362864628009582789845319680000000000000000, 71 := 850478588567862317521167644239926010288584608120796235886430763388588680378079017697280000000000000000, 72 := 61234458376886086861524070385274672740778091784697328983823014963978384987221689274204160000000000000000, 73 := 4470115461512684340891257138125051110076800700282905015819080092370422104067183317016903680000000000000000, 74 := 330788544151938641225953028221253782145683251820934971170611926835411235700971565459250872320000000000000000, 75 := 24809140811395398091946477116594033660926243886570122837795894512655842677572867409443815424000000000000000000, 76 := 1885494701666050254987932260861146558230394535379329335672487982961844043495537923117729972224000000000000000000, 77 := 145183092028285869634070784086308284983740379224208358846781574688061991349156420080065207861248000000000000000000, 78 := 11324281178206297831457521158732046228731749579488251990048962825668835325234200766245086213177344000000000000000000, 79 := 894618213078297528685144171539831652069808216779571907213868063227837990693501860533361810841010176000000000000000000, 80 := 71569457046263802294811533723186532165584657342365752577109445058227039255480148842668944867280814080000000000000000000, 81 := 5797126020747367985879734231578109105412357244731625958745865049716390179693892056256184534249745940480000000000000000000, 82 := 475364333701284174842138206989404946643813294067993328617160934076743994734899148613007131808479167119360000000000000000000, 83 := 39455239697206586511897471180120610571436503407643446275224357528369751562996629334879591940103770870906880000000000000000000, 84 := 3314240134565353266999387579130131288000666286242049487118846032383059131291716864129885722968716753156177920000000000000000000, 85 := 281710411438055027694947944226061159480056634330574206405101912752560026159795933451040286452340924018275123200000000000000000000, 86 := 24227095383672732381765523203441259715284870552429381750838764496720162249742450276789464634901319465571660595200000000000000000000, 87 := 2107757298379527717213600518699389595229783738061356212322972511214654115727593174080683423236414793504734471782400000000000000000000, 88 := 185482642257398439114796845645546284380220968949399346684421580986889562184028199319100141244804501828416633516851200000000000000000000, 89 := 16507955160908461081216919262453619309839666236496541854913520707833171034378509739399912570787600662729080382999756800000000000000000000, 90 := 1485715964481761497309522733620825737885569961284688766942216863704985393094065876545992131370884059645617234469978112000000000000000000000, 91 := 135200152767840296255166568759495142147586866476906677791741734597153670771559994765685283954750449427751168336768008192000000000000000000000, 92 := 12438414054641307255475324325873553077577991715875414356840239582938137710983519518443046123837041347353107486982656753664000000000000000000000, 93 := 1156772507081641574759205162306240436214753229576413535186142281213246807121467315215203289516844845303838996289387078090752000000000000000000000, 94 := 108736615665674308027365285256786601004186803580182872307497374434045199869417927630229109214583415458560865651202385340530688000000000000000000000, 95 := 10329978488239059262599702099394727095397746340117372869212250571234293987594703124871765375385424468563282236864226607350415360000000000000000000000, 96 := 991677934870949689209571401541893801158183648651267795444376054838492222809091499987689476037000748982075094738965754305639874560000000000000000000000, 97 := 96192759682482119853328425949563698712343813919172976158104477319333745612481875498805879175589072651261284189679678167647067832320000000000000000000000, 98 := 9426890448883247745626185743057242473809693764078951663494238777294707070023223798882976159207729119823605850588608460429412647567360000000000000000000000, 99 := 933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000, 100 := 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000]
array (1, 100) [(1, 1), (2, 2), (3, 6), (4, 24), (5, 120), (6, 720), (7, 5040), (8, 40320), (9, 362880), (10, 3628800), (11, 39916800), (12, 479001600), (13, 6227020800), (14, 87178291200), (15, 1307674368000), (16, 20922789888000), (17, 355687428096000), (18, 6402373705728000), (19, 121645100408832000), (20, 2432902008176640000), (21, 51090942171709440000), (22, 1124000727777607680000), (23, 25852016738884976640000), (24, 620448401733239439360000), (25, 15511210043330985984000000), (26, 403291461126605635584000000), (27, 10888869450418352160768000000), (28, 304888344611713860501504000000), (29, 8841761993739701954543616000000), (30, 265252859812191058636308480000000), (31, 8222838654177922817725562880000000), (32, 263130836933693530167218012160000000), (33, 8683317618811886495518194401280000000), (34, 295232799039604140847618609643520000000), (35, 10333147966386144929666651337523200000000), (36, 371993326789901217467999448150835200000000), (37, 13763753091226345046315979581580902400000000), (38, 523022617466601111760007224100074291200000000), (39, 20397882081197443358640281739902897356800000000), (40, 815915283247897734345611269596115894272000000000), (41, 33452526613163807108170062053440751665152000000000), (42, 1405006117752879898543142606244511569936384000000000), (43, 60415263063373835637355132068513997507264512000000000), (44, 2658271574788448768043625811014615890319638528000000000), (45, 119622220865480194561963161495657715064383733760000000000), (46, 5502622159812088949850305428800254892961651752960000000000), (47, 258623241511168180642964355153611979969197632389120000000000), (48, 12413915592536072670862289047373375038521486354677760000000000), (49, 608281864034267560872252163321295376887552831379210240000000000), (50, 30414093201713378043612608166064768844377641568960512000000000000), (51, 1551118753287382280224243016469303211063259720016986112000000000000), (52, 80658175170943878571660636856403766975289505440883277824000000000000), (53, 4274883284060025564298013753389399649690343788366813724672000000000000), (54, 230843697339241380472092742683027581083278564571807941132288000000000000), (55, 12696403353658275925965100847566516959580321051449436762275840000000000000), (56, 710998587804863451854045647463724949736497978881168458687447040000000000000), (57, 40526919504877216755680601905432322134980384796226602145184481280000000000000), (58, 2350561331282878571829474910515074683828862318181142924420699914240000000000000), (59, 138683118545689835737939019720389406345902876772687432540821294940160000000000000), (60, 8320987112741390144276341183223364380754172606361245952449277696409600000000000000), (61, 507580213877224798800856812176625227226004528988036003099405939480985600000000000000), (62, 31469973260387937525653122354950764088012280797258232192163168247821107200000000000000), (63, 1982608315404440064116146708361898137544773690227268628106279599612729753600000000000000), (64, 126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000), (65, 8247650592082470666723170306785496252186258551345437492922123134388955774976000000000000000), (66, 544344939077443064003729240247842752644293064388798874532860126869671081148416000000000000000), (67, 36471110918188685288249859096605464427167635314049524593701628500267962436943872000000000000000), (68, 2480035542436830599600990418569171581047399201355367672371710738018221445712183296000000000000000), (69, 171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000), (70, 11978571669969891796072783721689098736458938142546425857555362864628009582789845319680000000000000000), (71, 850478588567862317521167644239926010288584608120796235886430763388588680378079017697280000000000000000), (72, 61234458376886086861524070385274672740778091784697328983823014963978384987221689274204160000000000000000), (73, 4470115461512684340891257138125051110076800700282905015819080092370422104067183317016903680000000000000000), (74, 330788544151938641225953028221253782145683251820934971170611926835411235700971565459250872320000000000000000), (75, 24809140811395398091946477116594033660926243886570122837795894512655842677572867409443815424000000000000000000), (76, 1885494701666050254987932260861146558230394535379329335672487982961844043495537923117729972224000000000000000000), (77, 145183092028285869634070784086308284983740379224208358846781574688061991349156420080065207861248000000000000000000), (78, 11324281178206297831457521158732046228731749579488251990048962825668835325234200766245086213177344000000000000000000), (79, 894618213078297528685144171539831652069808216779571907213868063227837990693501860533361810841010176000000000000000000), (80, 71569457046263802294811533723186532165584657342365752577109445058227039255480148842668944867280814080000000000000000000), (81, 5797126020747367985879734231578109105412357244731625958745865049716390179693892056256184534249745940480000000000000000000), (82, 475364333701284174842138206989404946643813294067993328617160934076743994734899148613007131808479167119360000000000000000000), (83, 39455239697206586511897471180120610571436503407643446275224357528369751562996629334879591940103770870906880000000000000000000), (84, 3314240134565353266999387579130131288000666286242049487118846032383059131291716864129885722968716753156177920000000000000000000), (85, 281710411438055027694947944226061159480056634330574206405101912752560026159795933451040286452340924018275123200000000000000000000), (86, 24227095383672732381765523203441259715284870552429381750838764496720162249742450276789464634901319465571660595200000000000000000000), (87, 2107757298379527717213600518699389595229783738061356212322972511214654115727593174080683423236414793504734471782400000000000000000000), (88, 185482642257398439114796845645546284380220968949399346684421580986889562184028199319100141244804501828416633516851200000000000000000000), (89, 16507955160908461081216919262453619309839666236496541854913520707833171034378509739399912570787600662729080382999756800000000000000000000), (90, 1485715964481761497309522733620825737885569961284688766942216863704985393094065876545992131370884059645617234469978112000000000000000000000), (91, 135200152767840296255166568759495142147586866476906677791741734597153670771559994765685283954750449427751168336768008192000000000000000000000), (92, 12438414054641307255475324325873553077577991715875414356840239582938137710983519518443046123837041347353107486982656753664000000000000000000000), (93, 1156772507081641574759205162306240436214753229576413535186142281213246807121467315215203289516844845303838996289387078090752000000000000000000000), (94, 108736615665674308027365285256786601004186803580182872307497374434045199869417927630229109214583415458560865651202385340530688000000000000000000000), (95, 10329978488239059262599702099394727095397746340117372869212250571234293987594703124871765375385424468563282236864226607350415360000000000000000000000), (96, 991677934870949689209571401541893801158183648651267795444376054838492222809091499987689476037000748982075094738965754305639874560000000000000000000000), (97, 96192759682482119853328425949563698712343813919172976158104477319333745612481875498805879175589072651261284189679678167647067832320000000000000000000000), (98, 9426890448883247745626185743057242473809693764078951663494238777294707070023223798882976159207729119823605850588608460429412647567360000000000000000000000), (99, 933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000), (100, 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000)]
main _ = [AppendChan stdout (shows sub_b "\n")]
import Ratio -- 1.3
import Array -- 1.3
infix 1 =:
(=:) a b = (a,b)
main = putStr (shows sub_b "\n")
where
sub_b :: Array Int Double
sub_b = ixmap (102, 113) id b
......@@ -8,5 +13,5 @@ main _ = [AppendChan stdout (shows sub_b "\n")]
(ixmap (101,200) (\ i -> toInteger i - 100) a)
a :: Array Integer (Ratio Integer)
a = array (1,100) ((1 := 1) : [i := fromInteger i * a!(i-1)
a = array (1,100) ((1 =: 1) : [i =: fromInteger i * a!(i-1)
| i <- [2..100]])
array (102, 113) [102 := 6.3661977236758138e-1, 103 := 1.9098593171027440, 104 := 7.6394372684109761, 105 := 38.197186342054884, 106 := 229.18311805232929, 107 := 1604.2818263663050, 108 := 12834.254610930440, 109 := 115508.29149837396, 110 := 1155082.9149837396, 111 := 12705912.064821135, 112 := 152470944.77785364, 113 := 1982122282.1120973]
array (102, 113) [(102, 6.3661977236758138e-1), (103, 1.9098593171027440), (104, 7.6394372684109761), (105, 38.197186342054884), (106, 229.18311805232929), (107, 1604.2818263663050), (108, 12834.254610930440), (109, 115508.29149837396), (110, 1155082.9149837396), (111, 12705912.064821135), (112, 152470944.77785364), (113, 1982122282.1120973)]
......@@ -26,5 +26,5 @@ where {
f_foldr a_op a_r []=a_r;
f_foldr a_op a_r (a_a:a_x)=a_op a_a (f_foldr a_op a_r a_x);
f_map a_f a_x=[a_f a_a|a_a<-a_x];
main r = [AppendChan "stdout" (f_main c_input)]
main = putStr (f_main c_input)
}
These are bug-programs (fixed) that I haven't turned into tests yet.
Will
val1 :: Array Int Int
val1 = array (12,10) []
main = print [val1 == val1]
main = prints (exponent (2.0 :: Float), significand (2.0 :: Float),
exponent (2.0 :: Double),significand (2.0 :: Double)) "\n"
> module DataTypes where
> import GenUtils
> import Array -- 1.3
> import Ix
> import Char
> infix 1 =: -- 1.3
> (=:) a b = (a,b)
%------------------------------------------------------------------------------
......@@ -81,8 +86,8 @@ Now the ranks and files.
> userFormatExBoardPos (Just f,Nothing) = userFormatFile f
> userFormatExBoardPos (Nothing,Just r) = userFormatRank r
> userFormatExBoardPos _ = ""
> userFormatRank r = [chr (r + 48)]
> userFormatFile f = [chr (f + 96)]
> userFormatRank r = [toEnum (r + 48)]
> userFormatFile f = [toEnum (f + 96)]
%------------------------------------------------------------------------------
......@@ -243,9 +248,9 @@ These are the components of a move.
> getOpening eco@[a,b,c] | a >= 'A' && a <= 'E' && isDigit b && isDigit c
> = getOpenName ((ord a - ord 'A') * 100
> + (ord b - ord '0') * 10
> + (ord c - ord '0')) ++ " " ++ eco
> = getOpenName ((fromEnum a - fromEnum 'A') * 100
> + (fromEnum b - fromEnum '0') * 10
> + (fromEnum c - fromEnum '0')) ++ " " ++ eco
> getOpening other = other
> getOpenName :: Int -> String
......@@ -549,7 +554,7 @@ This uses forsyth notation.
> buildBoard :: String -> Board
> buildBoard str = Board brd initMoveNumber Nothing
> where
> brd = array boardSize (zipWith (:=) allSq (mkPieces str))
> brd = array boardSize (zipWith (=:) allSq (mkPieces str))
> allSq = [ (x,y) | y <- reverse [1..8::Int],x <- [1..8::Int]]
> mkPieces :: String -> [BoardSquare]
> mkPieces (hd:rest) | hd `elem` "KQRNBPkqrnbp" = pc : mkPieces rest
......
......@@ -33,10 +33,11 @@ All the code below is understood to be in the public domain.
> combinePairs,
> formatText ) where
> import Array -- 1.3
> import Ix -- 1.3
>#ifndef __GLASGOW_HASKELL__
> import {-fool mkdependHS-}
> Maybe (Maybe(..))
> import {-fool mkdependHS-}
> Trace
......@@ -49,9 +50,12 @@ HBC has it in one of its builtin modules
>#if defined(__GLASGOW_HASKELL__) || defined(__GOFER__)
> data Maybe a = Nothing | Just a deriving (Eq,Ord,Text)
> --in 1.3: data Maybe a = Nothing | Just a deriving (Eq,Ord,Text)
>#endif
> infix 1 =: -- 1.3
> type Assoc a b = (a,b) -- 1.3
> (=:) a b = (a,b)
> mapMaybe :: (a -> Maybe b) -> [a] -> [b]
> mapMaybe f [] = []
......@@ -87,7 +91,7 @@ This version returns nothing, if *any* one fails.
> joinMaybe _ Nothing (Just g) = Just g
> joinMaybe f (Just g) (Just h) = Just (f g h)
> data MaybeErr a err = Succeeded a | Failed err deriving (Eq,Text)
> data MaybeErr a err = Succeeded a | Failed err deriving (Eq,Show{-was:Text-})
@mkClosure@ makes a closure, when given a comparison and iteration loop.
Be careful, because if the functional always makes the object different,
......@@ -214,15 +218,15 @@ Note again the use of partiual application.
> arrCond bds pairs fnPairs def = (!) arr'
> where
> arr' = array bds [ t := head
> ([ r | (p := r) <- pairs, elem t p ] ++
> [ r | (f := r) <- fnPairs, f t ] ++
> arr' = array bds [ t =: head
> ([ r | (p, r) <- pairs, elem t p ] ++
> [ r | (f, r) <- fnPairs, f t ] ++
> [ def ])
> | t <- range bds ]
> memoise :: (Ix a) => (a,a) -> (a -> b) -> a -> b
> memoise bds f = (!) arr
> where arr = array bds [ t := f t | t <- range bds ]
> where arr = array bds [ t =: f t | t <- range bds ]
Quite neat this. Formats text to fit in a column.
......
......@@ -2,6 +2,7 @@
> import GenUtils
> import DataTypes
> import Array -- 1.3
%------------------------------------------------------------------------------
......@@ -155,7 +156,7 @@ Now filter out the moves it *cant* be.
> -> [(Piece,ChessFile,ChessRank)]
> getCurrPieces (Board arr (MoveNumber _ col) _) pc corr_file =
> [ (p,x,y) |
> ((x,y) := r) <- assocs arr,
> ((x,y), r) <- assocs arr,
> lookupSquare col r == Friendly,
> (Just p) <- [getSquarePiece r],
> p == pc,
......@@ -285,24 +286,24 @@ ToDo: add en-passant
> makeAMove :: Board -> PlayMove -> Board
> makeAMove board@(Board brd mv@(MoveNumber _ col) _)
> move@(PlayMove piece pos pos' NothingSpecial) =
> Board (brd // [ pos := VacantSq,
> pos' := mkColBoardSq col piece ])
> Board (brd // [ pos =: VacantSq,
> pos' =: mkColBoardSq col piece ])
> (incMove mv) Nothing
> makeAMove board@(Board brd mv@(MoveNumber _ col) _)
> move@(PlayMove piece pos@(f,_) pos' BigPawnMove) =
> Board (brd // [ pos := VacantSq,
> pos' := mkColBoardSq col piece ])
> Board (brd // [ pos =: VacantSq,
> pos' =: mkColBoardSq col piece ])
> (incMove mv) (Just f)
> makeAMove board@(Board brd mv@(MoveNumber _ col) _)
> move@(PlayMove piece pos@(f,_) pos' (Queening q)) =
> Board (brd // [ pos := VacantSq,
> pos' := mkColBoardSq col q])
> Board (brd // [ pos =: VacantSq,
> pos' =: mkColBoardSq col q])
> (incMove mv) (Just f)
> makeAMove board@(Board brd mv@(MoveNumber _ col) _) -- ASSERT ?
> move@(PlayMove piece (f,_) (f',_) EnPassant) =
> Board (brd // [ (f,st) := VacantSq,
> (f',fn) := mkColBoardSq col Pawn,
> (f',st) := VacantSq ])
> Board (brd // [ (f,st) =: VacantSq,
> (f',fn) =: mkColBoardSq col Pawn,
> (f',st) =: VacantSq ])
> (incMove mv) Nothing
> where (st,fn) = case col of
> White -> (5,6)
......@@ -310,29 +311,29 @@ ToDo: add en-passant
> makeACastleK (Board brd mv@(MoveNumber _ White) _) =
> Board (brd //
> [ (5,1) := VacantSq,
> (6,1) := mkColBoardSq White Rook,
> (7,1) := mkColBoardSq White King,
> (8,1) := VacantSq ]) (incMove mv) Nothing
> [ (5,1) =: VacantSq,
> (6,1) =: mkColBoardSq White Rook,
> (7,1) =: mkColBoardSq White King,
> (8,1) =: VacantSq ]) (incMove mv) Nothing
> makeACastleK (Board brd mv@(MoveNumber _ Black) _) =
> Board (brd //
> [ (5,8) := VacantSq,
> (6,8) := mkColBoardSq Black Rook,
> (7,8) := mkColBoardSq Black King,
> (8,8) := VacantSq ]) (incMove mv) Nothing
> [ (5,8) =: VacantSq,
> (6,8) =: mkColBoardSq Black Rook,
> (7,8) =: mkColBoardSq Black King,
> (8,8) =: VacantSq ]) (incMove mv) Nothing
> makeACastleQ (Board brd mv@(MoveNumber _ White) _) =
> Board (brd //
> [ (5,1) := VacantSq,
> (4,1) := mkColBoardSq White Rook,
> (3,1) := mkColBoardSq White King,
> (1,1) := VacantSq ]) (incMove mv) Nothing
> [ (5,1) =: VacantSq,
> (4,1) =: mkColBoardSq White Rook,
> (3,1) =: mkColBoardSq White King,
> (1,1) =: VacantSq ]) (incMove mv) Nothing
> makeACastleQ (Board brd mv@(MoveNumber _ Black) _) =
> Board (brd //
> [ (5,8) := VacantSq,
> (4,8) := mkColBoardSq Black Rook,
> (3,8) := mkColBoardSq Black King,
> (1,8) := VacantSq ]) (incMove mv) Nothing
> [ (5,8) =: VacantSq,
> (4,8) =: mkColBoardSq Black Rook,
> (3,8) =: mkColBoardSq Black King,
> (1,8) =: VacantSq ]) (incMove mv) Nothing
> disAmb _ [_] = ""
> disAmb (a,b) t@[(n,m),(x,y)]
......
......@@ -6,6 +6,9 @@
> import Interp
> import PrintTEX