Julia je novi jezik, nastao 2012. godine. Julia je dinamički jezik koji se može kompajlirati te dobiti vrlo dobre performanse (često u rangu C-a). Ima sličnosti s Pythonom, ali i s Lispom. Prvenstvena namjena mu je znanstveno računanje, ali dizajniran je tako da i u domeni nespecijaliziranih programskih jezika može naći svoje mjesto.
In [1]:
VERSION
Out[1]:
In [2]:
f(x, y) = 1 + 2x*y^2
Out[2]:
In [3]:
f(1,4)
Out[3]:
In [4]:
α=3
Out[4]:
In [5]:
println("α=", α)
In [6]:
μ=3
println("Sinus od $μ je $(sin(μ))")
In [7]:
10^19
Out[7]:
In [8]:
BigInt(10)^19
Out[8]:
In [9]:
a = Int8(1)
b = Int8(2)
a + b
Out[9]:
In [10]:
typeof(ans)
Out[10]:
In [11]:
typemax(Int64)
Out[11]:
In [12]:
c = 1+3.5im
Out[12]:
In [13]:
c^2
Out[13]:
In [14]:
c.re, c.im
Out[14]:
In [15]:
3//4
Out[15]:
In [16]:
typeof(ans)
Out[16]:
In [17]:
//(3, 4)
Out[17]:
In [18]:
//
Out[18]:
In [19]:
methods(//)
Out[19]:
In [20]:
l = [3, 4, 5]
Out[20]:
In [21]:
l[1]
Out[21]:
In [22]:
l[1:2]
Out[22]:
In [23]:
l[2:end]
Out[23]:
In [24]:
l[1:end-1]
Out[24]:
In [25]:
a = [1.1, 2.2, 3.3]
b = [4.4, 5.5, 6.6]
Out[25]:
In [26]:
dot(a,b)
Out[26]:
In [27]:
⋅(a,b)
Out[27]:
In [28]:
a.*b
Out[28]:
In [29]:
norm(a)
Out[29]:
In [30]:
a⋅b
Out[30]:
In [31]:
a×b
Out[31]:
In [32]:
Ψ = norm
Out[32]:
In [33]:
Ψ(a)
Out[33]:
In [34]:
?norm
Out[34]:
In [35]:
suma = 0
for i = 1:10
suma += i
end
println("Suma je $suma")
In [36]:
kvadrati = [i^2 for i in [1:2:10; 7]]
Out[36]:
In [37]:
M = [2 1; 1 1]
Out[37]:
In [38]:
M[:,1]
Out[38]:
In [39]:
rand()
Out[39]:
In [40]:
v = [1, 2]
Out[40]:
In [41]:
M*v
Out[41]:
In [42]:
dot(v,v)
Out[42]:
In [43]:
M = rand(100, 100)
Out[43]:
In [44]:
@time lamb, vv = eig(M)
Out[44]:
In [45]:
lu(M)
Out[45]:
In [46]:
norm(M)
Out[46]:
In [47]:
function normakvadrata(M)
norm(M^2)
end
Out[47]:
In [48]:
normakvadrata(M)
Out[48]:
In [49]:
Base.:+(s1::AbstractString, s2::AbstractString) = string(s1, s2)
In [50]:
"Prvi" + " drugi"
Out[50]:
In [51]:
"Vrijednost od x je " + 3
In [52]:
Base.:+(s::AbstractString, x::Number) = s + "$(2x)"
In [53]:
"Vrijednost od x je " + 3
Out[53]:
In [54]:
immutable Vector2D
x::Float64
y::Float64
end
In [55]:
v = Vector2D(3, 4);
w = Vector2D(5, 6);
In [56]:
v + w
In [57]:
Base.:+(v::Vector2D, w::Vector2D) = Vector2D(v.x+w.x, v.y+w.y)
In [58]:
v+w
Out[58]:
In [59]:
Base.:*(v::Vector2D, α::Number) = Vector2D(v.x*α, v.y*α)
Base.:*(α::Number, v::Vector2D) = Vector2D(v.x*α, v.y*α)
In [60]:
v * 3.5
Out[60]:
In [61]:
3.5 * v
Out[61]:
In [62]:
methods(+)
Out[62]:
In [63]:
function sum1(N::Int)
total = 0
for i in 1:N
total += i/2
end
total
end
function sum2(N::Int)
total = 0.0
for i in 1:N
total += i/2
end
total
end
Out[63]:
In [64]:
sum1(10), sum2(10)
Out[64]:
In [65]:
N = 10000000
@time sum1(N)
@time sum2(N)
Out[65]:
In [66]:
code_typed(sum2, (Int,))
Out[66]:
In [67]:
code_llvm(sum2, (Int, ))
In [68]:
code_native(sum2, (Int,))
In [69]:
using PyCall
@pyimport numpy.random as nprandom
nprandom.rand(3,4)
Out[69]:
In [70]:
objective = x -> cos(x) - x #ekvivalent lambda funkcijama u Pythonu
Out[70]:
In [71]:
objective(1)
Out[71]:
In [72]:
t = ccall( (:clock, "libc"), Int32, ())
Out[72]:
In [73]:
function es(n::Int64)
l = ones(Bool, n)
l[1] = false
for i in 2:int64(sqrt(n))
if l[i]
for j in (i*i):i:n
l[j] = false
end
end
end
return filter(x -> l[x],1:n)
end
Out[73]: