Bonjour,
Malgré toutes les gardes que j'ai mis pour limiter la valeur de l'indice à 15 pour le choix de la couleur, j'ai le message
<interactive>: Prelude.(!!): index too large

Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import Data.Monoid
import System.IO
import System.Random
import Graphics.Gloss
 
main = do
        affiche 
 
affiche = display  
	 (InWindow
	       "Pascal"
		(300, 300)
		(10, 10))
         black
         (picture)
 
picture = pictures (listOfpoints n a i j b coul)  -- ligne 17
    where
	a = [1,1,1,2]
	n = 182400
        i = 1
	j = 1
	b = 0
	coul = 0
 
listOfpoints 0 _ _ _ _ _ = []
listOfpoints n a i j b coul = point : listOfpoints (n-1) a' i' j' b' coul'
    where
	i' = calci i j
	j' = calcj i i' j
	b' = calcb a n i' j'
	a' = a ++ [b']
	coul' = teinte b'
        point = dessin n i' j' coul'
 
calci i j
	|j == i = i + 1
	|otherwise = i
 
calcj i i' j 
	|i' > i= 0
	|j == i' = j
	|otherwise = j + 1
 
calcb a n i' j'
	|j' == 0 = 1
	|j' == i' = (a  !! (n + 4 + j')) 	
	|otherwise = (a !! (n + 4 + j')) + (a !! (n + 4 + j' - i' ))`mod`2
 
teinte b'
	|b' == 0 = 0
	|b' < 128 = ((256`mod`(256 - 2*b'))`mod`13)
	|otherwise = 0
 
dessin n i' j' coul' = pictures
 
      [ (translate (fromIntegral i') (fromIntegral j') (color (myColor (coul')) (circle 1.0)))
      , (translate (- (fromIntegral i')) (fromIntegral j') (color (myColor (coul')) (circle 1.0)))
      ,	(translate (fromIntegral i') (- (fromIntegral j')) (color (myColor (coul')) (circle 1.0)))
      ,	(translate (- (fromIntegral i')) (- (fromIntegral j')) (color (myColor (coul')) (circle 1.0)))
      ,	(translate (fromIntegral j') (fromIntegral i') (color (myColor (coul')) (circle 1.0)))
      ,	(translate (- (fromIntegral j')) (fromIntegral i') (color (myColor (coul')) (circle 1.0)))
      ,	(translate (fromIntegral j') (- (fromIntegral i')) (color (myColor (coul')) (circle 1.0)))
      ,	(translate (- (fromIntegral j')) (- (fromIntegral i')) (color (myColor (coul')) (circle 1.0)))
      ]
 
myColor coul'
	|coul' < 0 = 0	
	|coul' < 16 = ([ca,cb,cc,cd,ce,cf,cg,ch,ci,cj,ck,cl,cm,cn,co,cp] !! coul')
	|otherwise = 0
 
ca = white
cb = light(light yellow)
cc = light yellow
cd = yellow   
ce = light(light orange)
cf = light orange
cg = orange
ch = light (dark orange)
ci = light red
cj = red
ck = dark red 
cl = light violet
cm = violet
cn = light(light (dark violet))
co = light ( dark violet)
cp = blue
Le problème est la valeur b', car si j'élimine b' du calcul de coul' tout marche.
par exemple pour coul' = n`mod`13 le dessin est bon (bien sur ce n'est pas Pascal) :
Nom : PascalFaux.jpg
Affichages : 321
Taille : 257,2 Ko
Ou encore pour coul' = teinte ((i'*j')`div`13) avec otherwise = 13
Nom : PascalFaux1.jpg
Affichages : 276
Taille : 92,0 Ko
Je ne trouve pas où est le problème.
Pourriez- vous m'aider svp ?