function greet(String name) {
Konsol:Print("Hello, " + name);
}
function add(Number a, Number b) : Number {
return a + b;
}
greet("world");
Var:Number result = add(3, 4);
Parameter types can be written as Number x or Var:Number x — both work.
Return type annotation (: Number, : String, : Boolean) is required for non-void functions. Void functions omit the suffix.
Var:Number n = add(1, 2) * 10; // 30
Each call gets its own local scope; locals are erased after the call returns.
function factorial(Number n) : Number {
if (n <= 1) { return 1; }
return n * factorial(n - 1);
}
Var:Number result = factorial(5);
Konsol:Print(result); // 120
If the script defines a main function, it is called automatically. Global variable declarations are executed first to initialise globals.
Var:Number count = 0; // initialised before main() runs
function main() {
Konsol:Print(count);
}
If there is no main, all top-level statements execute in order.
Variables declared inside main() are properly scoped and cleaned up after main returns.
// 04_functions.ks — Functions, return values, recursion, use in expressions
Konsol:Print("=== Functions ===");
// Basic function
function greet(String name) {
Konsol:Print("Hello, ${name}");
}
// Function with return value
function add(Number a, Number b) : Number {
return a + b;
}
// Function with Var: param style
function multiply(Var:Number x, Var:Number y) : Number {
return x * y;
}
// Multiple returns via early exit
function classify(Number n) : String {
if (n < 0) { return "negative"; }
if (n == 0) { return "zero"; }
return "positive";
}
// Recursion — factorial
function factorial(Number n) : Number {
if (n <= 1) { return 1; }
return n * factorial(n - 1);
}
// Recursion — Fibonacci
function fib(Number n) : Number {
if (n <= 1) { return n; }
return fib(n - 1) + fib(n - 2);
}
// Function using another function
function sumOfSquares(Number a, Number b) : Number {
return multiply(a, a) + multiply(b, b);
}
// ── Calls ──────────────────────────────────────────────────────────────────────
greet("world");
greet("minks");
Var:Number result = add(3, 4);
Konsol:Print("3 + 4 = ${result}");
Konsol:Print("6 * 7 = ${multiply(6, 7)}");
// Used directly in expression
Konsol:Print("add in expr = ${add(10, 20) * 2}");
Konsol:Print("nested calls = ${add(multiply(2, 3), multiply(4, 5))}");
Konsol:Print("classify -5 = ${classify(-5)}");
Konsol:Print("classify 0 = ${classify(0)}");
Konsol:Print("classify 9 = ${classify(9)}");
Konsol:Print("5! = ${factorial(5)}");
Konsol:Print("6! = ${factorial(6)}");
Konsol:Print("fib(7) = ${fib(7)}");
Konsol:Print("fib(10)= ${fib(10)}");
Konsol:Print("sumOfSquares(3,4) = ${sumOfSquares(3, 4)}");
// Test: recursive functions — fib(n-1) + fib(n-2) must not destroy caller's locals
function fib(Var:Number n) {
if (n <= 1) {
return n;
}
return fib(n - 1) + fib(n - 2);
}
function factorial(Var:Number n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
// fib sequence: 0 1 1 2 3 5 8 13 21 34
Konsol:Print(fib(0)); // 0
Konsol:Print(fib(1)); // 1
Konsol:Print(fib(5)); // 5
Konsol:Print(fib(10)); // 55
// factorials
Konsol:Print(factorial(5)); // 120
Konsol:Print(factorial(10)); // 3628800
// 32_defaults.ks — Default parameter values
Konsol:Print("=== Default Parameters ===");
// primitive defaults
function greet(String name, String greeting = "Hello") {
Konsol:Print(greeting + ", " + name + "!");
}
// all defaults
function counter(Number start = 0, Number step = 1) {
Konsol:Print(start + step);
}
// mixed: first required, rest defaulted
function info(String label, Number value = 42, Boolean flag = true) {
Konsol:Print("${label} ${value} ${flag}");
}
// class default
Class:Create(Point) {
Var:Number x;
Var:Number y;
}
function showPoint(Var:Point p = Point) {
Konsol:Print("x=" + p.x + " y=" + p.y);
}
greet("Alice"); // Hello, Alice!
greet("Bob", "Hi"); // Hi, Bob!
counter(); // 1
counter(10); // 11
counter(10, 5); // 15
info("item"); // item 42 true
info("item", 7); // item 7 true
info("item", 7, false); // item 7 false
showPoint(); // x=0 y=0