diff --git a/.obsidian/app.json b/.obsidian/app.json index 6fd1af8..0e0990d 100644 --- a/.obsidian/app.json +++ b/.obsidian/app.json @@ -5,5 +5,6 @@ "landscape": false, "margin": "0", "downscalePercent": 100 - } + }, + "alwaysUpdateLinks": true } \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index d779651..26d5727 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -13,7 +13,7 @@ "state": { "type": "markdown", "state": { - "file": "Algo/Séminaire/Chapter 4 - A bit of imperative.md", + "file": "Algo/Séminaire/Chapter 5 - Recursivity.md", "mode": "source", "source": false } @@ -85,7 +85,7 @@ "state": { "type": "backlink", "state": { - "file": "Algo/Séminaire/Chapter 4 - A bit of imperative.md", + "file": "Algo/Séminaire/Chapter 5 - Recursivity.md", "collapseAll": false, "extraContext": false, "sortOrder": "alphabetical", @@ -102,7 +102,7 @@ "state": { "type": "outgoing-link", "state": { - "file": "Algo/Séminaire/Chapter 4 - A bit of imperative.md", + "file": "Algo/Séminaire/Chapter 5 - Recursivity.md", "linksCollapsed": false, "unlinkedCollapsed": true } @@ -125,7 +125,7 @@ "state": { "type": "outline", "state": { - "file": "Algo/Séminaire/Chapter 4 - A bit of imperative.md" + "file": "Algo/Séminaire/Chapter 5 - Recursivity.md" } } }, @@ -156,10 +156,14 @@ "command-palette:Open command palette": false } }, - "active": "c82ce15f72f65a11", + "active": "c473a791e2b34194", "lastOpenFiles": [ - "Algo/Chapter 0 - A bit of imperative/0.1 - Print.md", + "Algo/Séminaire/assets/fact function response.png", + "Algo/Séminaire/assets/recursivite-meme.png", + "Pasted image 20230912155138.png", + "Algo/Séminaire/Chapter 5 - Recursivity.md", "Algo/Séminaire/Chapter 4 - A bit of imperative.md", + "Algo/Chapter 0 - A bit of imperative/0.1 - Print.md", "Algo/Séminaire/Untitled", "Algo/Séminaire/Introduction.md", "Algo/Séminaire/Chapter 1 - CAML basics.md", @@ -183,8 +187,6 @@ "Mathématiques/Séminaire/Logics/Pasted image 20230904100934.png", "Mathématiques/Séminaire", "Mathématiques/Séminaire/Logics/Pasted image 20230904100125.png", - "Mathématiques/Séminaire/Logics/Pasted image 20230904095003.png", - "Mathématiques/Séminaire/Logics/Pasted image 20230904094230.png", "2023-09-01.md", "Algo", "Mathématiques", diff --git a/Algo/Séminaire/Chapter 4 - A bit of imperative.md b/Algo/Séminaire/Chapter 4 - A bit of imperative.md index eb74e2b..660734d 100644 --- a/Algo/Séminaire/Chapter 4 - A bit of imperative.md +++ b/Algo/Séminaire/Chapter 4 - A bit of imperative.md @@ -72,6 +72,12 @@ Error: should have int type (*because of the hidden else*) # let print_even n = if n mod 2 = 0 then - print_int n ; - print_newline() - \ No newline at end of file + begin + print_int n ; + print_newline() + end;; (*begin and end used to execute more than 1 function into a if*) +val print_even : int -> unit = + +# print_even 4;; +4 +-: unit = () diff --git a/Algo/Séminaire/Chapter 5 - Recursivity.md b/Algo/Séminaire/Chapter 5 - Recursivity.md new file mode 100644 index 0000000..a4e1df5 --- /dev/null +++ b/Algo/Séminaire/Chapter 5 - Recursivity.md @@ -0,0 +1,44 @@ +![[recursivite-meme.png]] +### 5.1. Simple functions +To create a recursive function we have to use this structure + +```Ocaml +(*normal function*) +# let f = expr -> 1) evaluate expr ; 2) create & link f to the result + +(*recursiv function*) +# let rec f = expr -> 1) create f ; 2) evaluate expr ; 3) link f to the result +``` + +**Exmple with factorial function** +```Ocaml +# let rec fact = function + | 0 -> 1 + | n -> n * fact(n-1) + +# fact 4;; +-: int = 24 +``` +![[fact function response.png]] +> ⚠️ CAML have a call stack limite (it will block with stack overflow if the limit is reach) + +**Basic expression** +```Ocaml +let rec f params = + if stop condition then + stop expression + else + recursive expression +``` + +To write a recurvise function we need two things +1) There always is a stop case +2) The parameters of a recursive call are different then its parent call, and go towards the stop condition + +### 5.2. Down +```Ocaml +# let rec countdown n = + if n = 0 then + print_int(0) + else + print_int(countdown (n-1));; \ No newline at end of file diff --git a/Algo/Séminaire/assets/fact function response.png b/Algo/Séminaire/assets/fact function response.png new file mode 100644 index 0000000..7b70343 Binary files /dev/null and b/Algo/Séminaire/assets/fact function response.png differ diff --git a/Algo/Séminaire/assets/recursivite-meme.png b/Algo/Séminaire/assets/recursivite-meme.png new file mode 100644 index 0000000..352771d Binary files /dev/null and b/Algo/Séminaire/assets/recursivite-meme.png differ