### A Pluto.jl notebook ### # v0.12.4 using Markdown using InteractiveUtils # ╔═╡ d9c36a12-19eb-11eb-26a5-87ec7d147a91 # basic function declaration function f(x, y) x + y*2 # return is redundant end # ╔═╡ eef668d0-19eb-11eb-0ff6-890a1f5753d5 f(3, 4) # ╔═╡ f515eeaa-19eb-11eb-01bd-31d905ed66ce # function declaration in assignment form g(x) = f(x, x) + 2 # ╔═╡ 0a693f8c-19ec-11eb-356b-e58715e5bdb7 g(1) # ╔═╡ 12deb0b4-19ec-11eb-23be-b9b2595b4cc1 # g can be used with different types: g(3.4) # ╔═╡ 49184494-19ec-11eb-1f62-e7b132947ad0 # functions with no return value return "nothing" function procedure() # do stuff end # ╔═╡ 4f44b014-19ec-11eb-3356-1b861412d1ed a = procedure() # ╔═╡ 526bc2f0-19ec-11eb-0942-c36c57b69cf9 a == nothing # ╔═╡ 898cfe34-19ec-11eb-13c6-1707cdda1401 # operators are functions +(3, 4, 11) # ╔═╡ 8d47b60e-19ec-11eb-3826-e9a3a34b5804 # anonymous functions h = x -> 2x^2 + 1 # ╔═╡ a8e5665e-19ec-11eb-1dbe-19658c29b0e2 h(3) # ╔═╡ b9534f4c-19ec-11eb-0c3e-3d4056a6715a map(x -> 3x, [1, 2, 3]) # ╔═╡ f86ba81e-19ec-11eb-3ba3-f5b1fa9dafab # argument destructuring on function arguments function sum_tuples((a, b), (c, d)) (a+c, b+d) end # ╔═╡ 0ef8dbc4-19ed-11eb-15ad-19a4a4e2fdcb sum_tuples((2, 3), (4, 5)) # ╔═╡ 1f85be8a-19ed-11eb-1285-13351bf00e18 # variadic functions function sum_values(x...) res = 0 for v in x res += v end res end # ╔═╡ 2f98ebf8-19ed-11eb-1efa-c1334092321d sum_values(), sum_values(2, 3, 4) # ╔═╡ 4d263676-19ed-11eb-2a1e-a10c85657e15 # pass array or tuple to variadic function v = 1:3 # ╔═╡ 59fbb2c2-19ed-11eb-379c-bd96b4c82d94 sum_values(v...) # ╔═╡ 5dd8774a-19ed-11eb-21eb-fdc522cbfd4c tup = (3, 4, 5) # ╔═╡ 60698224-19ed-11eb-33bc-0f664ff59ae8 sum_values(tup...) # ╔═╡ d7185526-19ed-11eb-3029-d7fdf731b05a # also works with non-variadic functions sum_two(a, b) = a+b # ╔═╡ e203d406-19ed-11eb-3d1b-2b2d9f774d80 sum_two(v[1:2]...) # ╔═╡ 65afeed0-19ed-11eb-1db9-65639556c2ae # variadic function with mandatory arguments function varf(a, b...) return a + sum_values(b...) end # ╔═╡ 726e9234-19ed-11eb-34b4-35052d906c63 varf() # ╔═╡ 760d9dcc-19ed-11eb-00ab-2f60dfe89a79 varf(1,3) # ╔═╡ 0b3ed5c8-19ee-11eb-2d29-952170beda98 # keywoard arguments # ╔═╡ 36127bba-19ee-11eb-001a-2b73fa18afe5 # do-block syntax function my_map(f::Function, iterable) res = [] for v in iterable push!(res, f(v)) end res end # ╔═╡ db3320b8-19f3-11eb-2c88-750633c05917 my_map(x -> if x % 2 == 0 true else false end, [1,2,3,4]) # ╔═╡ 1cfccdfa-19f4-11eb-0872-d37643e7945e my_map(x -> begin if x % 2 == 0 a = 1 else a = 2 end a^2 end, [1,2,3,4]) # ╔═╡ 357feaba-19f4-11eb-2d43-597d72fbe61b # same code as above but with do noation my_map([1,2,3,4]) do x if x % 2 == 0 a = 1 else a = 2 end a^2 end # ╔═╡ d687055e-19fb-11eb-07c9-6b8e79818b43 # function composition # operator is \circle square(x)=x^2 # ╔═╡ fe26c91e-19fb-11eb-3eea-f7311e4da38a times_two(x)=2x # ╔═╡ fcd9f6f8-19fb-11eb-1d8b-af0425c4918e map(square ∘ times_two, [1,2,3]) # ╔═╡ 1a39fe3e-1a10-11eb-2bf7-275b5206b4e0 # same as above with dot operator (square ∘ times_two).([1,2,3]) # ╔═╡ 818a3b74-1a10-11eb-14a0-6d4a364120ad # pipeline operator 2 |> square |> times_two # equivalent to (times_two ∘ square)(2) # ╔═╡ ebd2f64a-1a12-11eb-2b8d-bbcaf8cea615 # ╔═╡ Cell order: # ╠═d9c36a12-19eb-11eb-26a5-87ec7d147a91 # ╠═eef668d0-19eb-11eb-0ff6-890a1f5753d5 # ╠═f515eeaa-19eb-11eb-01bd-31d905ed66ce # ╠═0a693f8c-19ec-11eb-356b-e58715e5bdb7 # ╠═12deb0b4-19ec-11eb-23be-b9b2595b4cc1 # ╠═49184494-19ec-11eb-1f62-e7b132947ad0 # ╠═4f44b014-19ec-11eb-3356-1b861412d1ed # ╠═526bc2f0-19ec-11eb-0942-c36c57b69cf9 # ╠═898cfe34-19ec-11eb-13c6-1707cdda1401 # ╠═8d47b60e-19ec-11eb-3826-e9a3a34b5804 # ╠═a8e5665e-19ec-11eb-1dbe-19658c29b0e2 # ╠═b9534f4c-19ec-11eb-0c3e-3d4056a6715a # ╠═f86ba81e-19ec-11eb-3ba3-f5b1fa9dafab # ╠═0ef8dbc4-19ed-11eb-15ad-19a4a4e2fdcb # ╠═1f85be8a-19ed-11eb-1285-13351bf00e18 # ╠═2f98ebf8-19ed-11eb-1efa-c1334092321d # ╠═4d263676-19ed-11eb-2a1e-a10c85657e15 # ╠═59fbb2c2-19ed-11eb-379c-bd96b4c82d94 # ╠═5dd8774a-19ed-11eb-21eb-fdc522cbfd4c # ╠═60698224-19ed-11eb-33bc-0f664ff59ae8 # ╠═d7185526-19ed-11eb-3029-d7fdf731b05a # ╠═e203d406-19ed-11eb-3d1b-2b2d9f774d80 # ╠═65afeed0-19ed-11eb-1db9-65639556c2ae # ╠═726e9234-19ed-11eb-34b4-35052d906c63 # ╠═760d9dcc-19ed-11eb-00ab-2f60dfe89a79 # ╠═0b3ed5c8-19ee-11eb-2d29-952170beda98 # ╠═36127bba-19ee-11eb-001a-2b73fa18afe5 # ╠═db3320b8-19f3-11eb-2c88-750633c05917 # ╠═1cfccdfa-19f4-11eb-0872-d37643e7945e # ╠═357feaba-19f4-11eb-2d43-597d72fbe61b # ╠═d687055e-19fb-11eb-07c9-6b8e79818b43 # ╠═fe26c91e-19fb-11eb-3eea-f7311e4da38a # ╠═fcd9f6f8-19fb-11eb-1d8b-af0425c4918e # ╠═1a39fe3e-1a10-11eb-2bf7-275b5206b4e0 # ╠═818a3b74-1a10-11eb-14a0-6d4a364120ad # ╟─ebd2f64a-1a12-11eb-2b8d-bbcaf8cea615