Bonjour, j'ai une fonction qui renvoie soit une list de Big_int soit un failwith "", je souhaite m'en servir dans une deuxième fonction, Est il possible de tester si failwith faire .... sinon ....
Bonjour, j'ai une fonction qui renvoie soit une list de Big_int soit un failwith "", je souhaite m'en servir dans une deuxième fonction, Est il possible de tester si failwith faire .... sinon ....
Si c'est une valeur de retour normale, tu devrais probablement utiliser un type adapté (par exemple, le type option).
Sinon, il suffit de mettre un try with (fais une recherche pour la syntaxe exacte).
Bon ça c'est mon bout de code, j'explique vite fais, la premiere me renvoie soit une liste de décomposition en produit de facteur premier soit une exception, et je souhaite que dans ma deuxieme fonction si j'ai l exception je fais tel instruction sinon l'autre, c'est juste que je bloque sur la syntaxe du try with. A ce que j'ai compris ça renvoie soit le try soit ce qu'il y a apres la fleche, or est-ce vraiment possible car les deux expressions n'ont pas le même type ? Est il possible de faire un else.
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 (* Teste si un nombre x est decomposable sur la base de factorisation b si oui la fonction renvoie sa decomposition sinon un failwith "Not_B_Number" *) let is_B_number x n = let cp = pgcdResteBase x n base in let res = multElList base in let rec loop a b base = let (p,q) = pgcdCouple a b in if (pgcd p q =/ unit) then (q=/unit || isInList base q) else loop q b base in if loop (snd cp) res base then dpfp (resteCarre x n) else raise (Failure "Not_B_Number");; (* Retourne des bnombres de n et leur décomposition en produit de facteurs premier sur la base b *) let b_numbers n b = let rec loop n b i l = let x = (randBigInt n) in match i with |0 -> l |y -> let c = is_B_number x n b in try c with (Failure "Not_B_Number") -> loop n b y l loop n b (y-1) ((x,c)::l) in loop n b ((List.length b) + 1) [];;
je souhaite que dans ma deuxieme fonction si j'ai l'exception je fais tel instruction sinon l'autre, c'est juste que je bloque sur la syntaxe du try with.
- s'il n'y pas d'exception alors le résultat c'est ce qui suit le mot-clé try
- s'il y a une exception alors le résultat c'est ce qui suit le mot-clé with
Si ton code marche essaye de passer un peu de temps à améliorer son style.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 try let c = is_B_number x n b in loop n b (y-1) ((x,c)::l) with Failure "Not_B_Number" -> loop n b y l
S'il ne marche pas alors la solution c'est d'améliorer ton style.
Partager