Files
kyn/docs/syntax.md
2025-10-04 14:54:32 +10:00

4.5 KiB

Kyn Syntax

This document details syntax of provided Kyn modules.

Call a module by writing it's name, then the arguments for the module.

Substitute the output of a module into another module's arguments by enclosing the call in (parenthases).

Access a variable by prefixing it's name with a $ dollar sign.

Data Types

Kyn supports several data types: strings, integers, doubles (floating-point numbers), and lists.

Strings

Strings are enclosed in double quotes. let myString = "Hello, World!"

Numbers

Numbers can be integers or doubles. let myInt = 42 let myDouble = 3.14

Lists

Lists are ordered collections of values, enclosed in square brackets. let myList = [1, "two", 3.0, ["nested", "list"]]

Input/Output

print

Prints all the arguments provided to the console.

Example: print "Hello!"

println

Prints all the arguments provided to theconsole, appending a newline after.

Example: println "Hello!"

input

Gets a line of input from the console.

Example: input (this does nothing but prompt the user)

Another example: let userInput = (input)

Variables and Data

let

Defines a variable to the value provided. If no value is provided, it defaults to an empty string.

Example: let myVar = "Hello!" Example: let anotherVar

concat

Concatenates multiple strings or numbers together.

Example: println (concat "There are " 3 " apples.") # Prints "There are 3 apples."

Indexed Operations

You can access elements of lists and characters of strings by their index (starting from 0).

Get element

Syntax: (variable index)

let myList = ["a", "b", "c"]
println (myList 1) # Prints "b"

let myString = "hello"
println (myString 2) # Prints "l"

Set element

Syntax: variable index = newValue

let myList = ["a", "b", "c"]
myList 1 = "z"
println $myList # Prints ["a", "z", "c"]

let myString = "hello"
myString 0 = "j"
println $myString # Prints "jello"

size

You can get the number of elements in a list or characters in a string using size.

Syntax: (variable size)

let myList = [1, 2, 3, 4]
println (myList size) # Prints 4

let myString = "hello"
println (myString size) # Prints 5

Computations

math

Computes a mathematical expression. Supports addition (+), subtraction (-), multiplication (*), division (/), power to (^) and mod (%). Follows order of operations.

Example: math 4 * 3 + 12 / 4 - 5 ^ 3

compare

Compares two values. Supports equal (==) and inequal (!=) on all values. Supports greater than (>), greater than or equal to (>=), lesser than (<), and lesser than or equal to (<=) for numbers. Returns "1" for true and "0" for false.

Control Flow

exit

Exits the program with a return code. If no return code or an invalid return code is provided, exits with code 0. Otherwise, exits with given code.

if

Runs a block of code if a condition is true. An optional else block can be provided. The condition is considered true if it's not 0, "false", or an empty string/list.

Example:

if compare 1 == 1 {
    println "1 is the same as 1"
} else {
    println "1 is not the same as 1"
}

while

Runs a block of code repeatedly as long as a condition is true.

Example:

let number = 0

while compare $number < 10 {
    number = (math $number + 1)
    println $number
}

fun

Defines a function with a name, a list of arguments, and a body.

fun multiply a b {
    return (math $a * $b)
}

let product = (multiply 7 6)
println $product # Prints 42

return

Exits a function, optionally returning a value.

fun myFunc {
    println "doing stuff..."
    return "done"
    println "this will not print"
}

let result = (myFunc)
println $result # Prints "doing stuff..." and then "done"

File I/O

file

The file module contains many submodules for reading from and writing to files.

file read

Reads an entire file. Returns a string.

Example: file read "myFile.txt"

file readlines

Reads an entire file. Returns a list of strings, split by the line.

Example: file readlines "myFile.txt"

file exists

Determines whether or not a file exists on the system. If yes, returns "true". If not, returns "false".

Example: file exists "myFile.txt"

file write

Overwrites a file with content provided. This is destructive, be careful!

Example: file write "myFile.txt" "Hello from the file!"

file append

Appends text to the end of a file.

Example: file append "myFile.txt" "Hello from the end of the file!"