54 lines
802 B
PSL
54 lines
802 B
PSL
// Vectors
|
|
|
|
struct vec2 {
|
|
x : f32
|
|
y : f32
|
|
}
|
|
|
|
func add(a : vec2, b : vec2) -> vec2 {
|
|
return vec2(a.x + b.x, a.y + b.y)
|
|
}
|
|
|
|
mut v = add(vec2(1.0, 2.0), vec2(3.0, 4.0))
|
|
v.x = -v.x
|
|
v.y = -v.y
|
|
|
|
// Factorial
|
|
|
|
func factorial(n : u32) -> u32 {
|
|
if n == 0u { return 1u }
|
|
return n * factorial(n - 1u)
|
|
}
|
|
|
|
let factorial10 = factorial(10u)
|
|
|
|
// Fibonacci
|
|
func fib(n : u32) -> u32 {
|
|
// Slow implementation with
|
|
// exponentially-growing recursion tree
|
|
if n == 0u | n == 1u {
|
|
// Base case
|
|
return n
|
|
}
|
|
return fib(n - 1u) + fib(n - 2u)
|
|
}
|
|
|
|
let fib10 = fib(10u)
|
|
|
|
|
|
func h() -> u32 {
|
|
return 0u
|
|
}
|
|
|
|
func f() -> u32 {
|
|
return h()
|
|
}
|
|
|
|
func g() -> u32 {
|
|
func h() -> u32 { return 1u }
|
|
return f()
|
|
}
|
|
|
|
// Should equal 0u, but equals 1u due to an error in
|
|
// how the interpreter resolves functions & variables
|
|
let x = g()
|