Bonjour,
Je suis actuellement en train d'apprendre Ocaml. Je souhaiterais compresser des images et pour cela j'ai besoin d'écrire bit à bit. Je me suis lancé dans l'écriture et voilà ce que j'obtiens :
Malheureusement j'obtiens l'erreur suivante dans l'interpréteur :
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 (* binary writing and reading *) type binary_buffer = { file : out_channel; buffer : char array; size : int; mutable byte_index : int; mutable bit_index : int; } ;; let open_binary_file name = { file = open_out name; buffer = Array.make 256 (Char.chr 0); size = 256; byte_index = 0; bit_index = 0; } ;; let write_buffer buffer = for i = 0 to buffer.size do output_byte buffer.file (int_of_char buffer.buffer.(i)) done ;; let write_bit buffer bit = let bits_written = buffer.byte_index * 8 + buffer.bit_index in let byte_index = buffer.byte_index in let bit_index = buffer.bit_index in let current_byte = buffer.buffer.(byte_index) in begin if bits_written >= buffer.size then write_buffer buffer; if bit <> 0 then let new_byte = (int_of_char current_byte) lor (1 lsl (7 - bit_index)) in buffer.buffer.(byte_index) <- (char_of_int new_byte); if bit_index = 7 then buffer.byte_index = buffer.byte_index + 1; buffer.bit_index = (buffer.bit_index + 1) mod 8; end ;;
File "binary.ml", line 37, characters 29-50:
Error: This expression has type int but an expression was expected of type
unit
C'est au niveau de la fonction write_bit. Je comprends le pourquoi de l'erreur mais je ne sais pas comment lui dire d'ignorer le fait que cette affectation puisse être une expression de type int.
Si quelqu'un pouvait m'aider ;-)
De plus, j'ai pensé un petit peu comme si j'écrivais un programme C car ce sont des entrées sorties mais si quelqu'un a une meilleure approche, je suis preneur.
Merci à vous.
--
sperca
Partager