210 lines
5.1 KiB
Julia
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
|