epicours/Algo/Séminaire/Chapter 3 - Case analysis.md

52 lines
1.0 KiB
Markdown

## 3.1. The alternative
### The if structure
```Ocaml
if cond then expr1 else expr2
```
> ⚠️ `expr1` and `expr2` have to be the same type. `cond` is a `bool`
**For exemple**
```Ocaml
# if 1<2 then "higher" else "lower" ;;
-: string = "higher"
```
**Exercise : absolute program**
```Ocaml
# let abs(x) =
if x>0 then x
else -x ;;;
val abs : int -> int <fun>
```
## 3.2. Exceptions
### Division by 0:
```Ocaml
# 1/0
Exception : Division by zero
```
### Failwith:
Failwith is a function that take a string argument (the reason) and return the error. That way, we can raise an error into our code
```Ocaml
# failwith;;
-: string -> a = <fun>
# failwith "oops";;
Exception : Failwith "oops"
```
### invalid_arg:
Invalid_arg is a function that take a string argument (the reason) and return the error. That way, we can raison an error about an argument
```Ocaml
# invalid_arg "oops";
Exception: Invalid_argument "oops"
(*example*)
# let div a b =
if b = 0 then invalid_arg("div: b = 0")
else a/b ;;;
val div int -> int -> int = <fun>
```