diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 3c384ef..0f62cd3 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -159,12 +159,12 @@ "active": "0d2d422aa24bb900", "lastOpenFiles": [ "Algo/Séminaire/Introduction.md", + "Algo/Séminaire/Exercices seminaire.md", "Algo/Séminaire/Chapter 5 - Recursivity.md", "Algo/Séminaire/Chapter 3 - Case analysis.md", "Algo/Séminaire/Chapter 2 - Functions.md", "Algo/Séminaire/Chapter 4 - A bit of imperative.md", "Algo/Séminaire/Chapter 1 - CAML basics.md", - "Algo/Séminaire/Exercices seminaire.md", "Algo/Séminaire/assets/exception-meme.png", "Algo/Séminaire/assets/filter-meme.png", "Algo/Séminaire/assets/if-meme.png", diff --git a/Algo/Séminaire/Chapter 5 - Recursivity.md b/Algo/Séminaire/Chapter 5 - Recursivity.md index 8bb8f55..229b6bd 100644 --- a/Algo/Séminaire/Chapter 5 - Recursivity.md +++ b/Algo/Séminaire/Chapter 5 - Recursivity.md @@ -94,3 +94,11 @@ val add : int -> bool = val even : int -> bool = ``` +An accumulator is a thing that try to get our result. In CAML we trying to not use an accumulator in our program. In CAML the syntax for the accumulator (`inv`) is: (exemple with reverse_int exercise. See 4.9 - b) +```Ocaml +# let reverse_int = + let rec rev inv = function + | 0 -> inv + | n -> rev (inv*10 + n mod 10)(n/10) + in rev 0 n;; +``` diff --git a/Algo/Séminaire/Exercices seminaire.md b/Algo/Séminaire/Exercices seminaire.md index c0006f1..6d881fe 100644 --- a/Algo/Séminaire/Exercices seminaire.md +++ b/Algo/Séminaire/Exercices seminaire.md @@ -339,12 +339,10 @@ let rec reverse_int n = val reverse : int -> string = # let reverse_int = - let rec rev org new_ = - if org < 10 then - new_ * 10 + org - else - rev (org/10)(new*10 + org mod 10) - in rev n 0;; + let rec rev inv = function + | 0 -> inv + | n -> rev (inv*10 + n mod 10)(n/10) + in rev 0 n;; ``` ## Exercise 4.10