Bonjour,
Je débute en Ocaml, et j'apprends par moi-même, donc j'essaye de comprendre comment fonctionne le langage, et comment la machine interprète les choses. Et je suis face à une incompréhension. A la base, je voulais étudier les piles/files. Donc concernant les files, je voulais faire un programme qui renvoie le contenu d'une file, et voici donc ce que j'ai fais :
#open "queue" ;;
let file = new ();;
for i=1 to 5 do add i file done;;
let non_vide f = try peek f ; true with Empty -> false;;
let show_file f =
let b = ref true in
while !b do
print_int (peek f);
take f;
b := non_vide f;
done;;
show_file file;;
let non_vide f = take f ; true;;
Et voici le message d'erreur d'Ocaml : Attention: cette expression est de type int,
mais est utilisée avec le type unit.
(néanmoins, ça m'affiche ce que je voulais)
Donc je pensais que c'était parce que take f enlève la tête de file puis la renvoie, et justement ici vu que c'est dans une séquence, ça ne renverra rien, et ce serait pour ça qu'il m'alarme ? Mais bon, moi ce que je voulais, c'était juste retirer la tête de file. C'est un exemple très con car je pourrais directement enlever l'instruction take f; et remplacer le print_int au-dessus par print_int(take f);, mais ce que je veux c'est comprendre pourquoi il m'affiche ici cette erreur alors que plus haut, j'ai écris :
let non_vide f = try peek f ; true with Empty -> false;;
et là il ne m'affiche aucune erreur, alors que pourtant le peek f renvoie aussi normalement la tête de file, et ici il est utilisé dans une séquence d'instruction et donc ne renvoie rien (donc devrait être aussi de type unit non ?). Je devrais donc avoir la même alarme, non ?
Merci d'avance de m'aider ! 