# 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)` ```kyn let myList = ["a", "b", "c"] println (myList 1) # Prints "b" let myString = "hello" println (myString 2) # Prints "l" ``` ### Set element Syntax: `variable index = newValue` ```kyn 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)` ```kyn 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: ```kyn 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: ```kyn 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. ```kyn 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. ```kyn 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!"`