From 40a590a28f7311bc3f88847edfe9e67534f1b44b Mon Sep 17 00:00:00 2001 From: Vinicius Silva Date: Sat, 30 Dec 2023 17:57:10 -0300 Subject: [PATCH] 13_functions direcory created --- 13_functions/anonynous_higher.v | 39 ++++++++++++++++++++++ 13_functions/closures.v | 58 +++++++++++++++++++++++++++++++++ 13_functions/references.v | 22 +++++++++++++ 3 files changed, 119 insertions(+) create mode 100644 13_functions/anonynous_higher.v create mode 100644 13_functions/closures.v create mode 100644 13_functions/references.v diff --git a/13_functions/anonynous_higher.v b/13_functions/anonynous_higher.v new file mode 100644 index 0000000..1341bc8 --- /dev/null +++ b/13_functions/anonynous_higher.v @@ -0,0 +1,39 @@ +fn sqrt(n int) int{ + return n*n +} + +fn cube(n int) int{ + return n*n*n +} + +fn run(value int, op fn(int) int) int{ + return op(value) +} + +pub fn main(){ + + println(run(5, sqrt)) + + double_fn := fn(n int) int { + return n + n + } + + println(5, double_fn) + + res := run(5, fn(n int) int{ + return n+n + }) + + println(res) + + fns := [sqrt, cube] + + println(fns[0](10)) + fns_map := { + 'sqrt' : sqrt + 'cube' : cube + } + + println(fns_map['cube'](2)) + +} \ No newline at end of file diff --git a/13_functions/closures.v b/13_functions/closures.v new file mode 100644 index 0000000..cf8247a --- /dev/null +++ b/13_functions/closures.v @@ -0,0 +1,58 @@ +pub fn main(){ + + my_int := 1 + + my_closure := fn[my_int] (){ + println(my_int) + } + + my_closure() + + // ====================================================== // + + mut i := 1 + + func := fn[i] () int { + return i + } + + println(func() == 1) + i = 1 + println(func() == 1) + + // ====================================================== // + + c := new_counter() + + println(c()) + println(c()) + println(c()) + + mut i2 := 0 + mut ref := &i2 + + println_counter := fn[ref] () + { + println(*ref) + } + + println_counter() + i2 = 10 + println_counter() + + f(dump(100),dump(200),dump(300)) + +} + +fn f(a1 int, a2 int, a3 int){ + dump(a1+a2+a3) +} + +fn new_counter() fn() int{ + mut i := 0 + + return fn[mut i] () int{ + i++ + return i + } +} \ No newline at end of file diff --git a/13_functions/references.v b/13_functions/references.v new file mode 100644 index 0000000..b297e0f --- /dev/null +++ b/13_functions/references.v @@ -0,0 +1,22 @@ +struct Foo{ + abc int +} + +fn (foo Foo) bar_method(){} + +fn (foo &Foo) bar(){ + println(foo.abc) +} + +fn bar_function(foo Foo){} + + +struct Node[T]{ + val T + left &Node[T] + right &Node[T] +} + +pub fn main(){ + +} \ No newline at end of file