Aristarkos/notebooks/functions.jl

210 lines
5.1 KiB
Julia

### 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