🐐 Update code snippets
This commit is contained in:
170
README.md
170
README.md
@@ -5,53 +5,20 @@
|
||||
|
||||
## Example code
|
||||
### Hello World
|
||||
```
|
||||
DESIGNA x VT "Hello World!"
|
||||
DICE(x)
|
||||
```
|
||||

|
||||
|
||||
### Recursive Fibonacci number function
|
||||
|
||||
```
|
||||
DEFINI fib(x) VT {
|
||||
SI x EST NVLLVS TVNC {
|
||||
REDI(NVLLVS)
|
||||
} ALVID SI x EST I TVNC {
|
||||
REDI(I)
|
||||
} ALVID {
|
||||
REDI(INVOCA fib(x-II) + INVOCA fib(x-I))
|
||||
}
|
||||
}
|
||||
```
|
||||

|
||||
|
||||
### Number guessing game
|
||||
|
||||
```
|
||||
CVM FORS
|
||||
|
||||
DESIGNA correct VT FORTIS_NVMERVS(I,C)
|
||||
DESIGNA gvess VT NVLLVS
|
||||
|
||||
DVM FALSITAS FACE {
|
||||
DESIGNA gvess VT AVDI_NVMERVS()
|
||||
SI gvess MINVS correct TVNC {
|
||||
DICE("Too low!")
|
||||
} ALVID SI gvess PLVS correct TVNC {
|
||||
DICE("Too high!")
|
||||
} ALVID {
|
||||
ERVMPE
|
||||
}
|
||||
}
|
||||
|
||||
DICE("You guessed correctly!")
|
||||
```
|
||||

|
||||
|
||||
## Variables
|
||||
Variables are set with the `DESIGNA` and `VT` keywords. Type is inferred.
|
||||
|
||||
```
|
||||
DESIGNA x VT XXVI
|
||||
```
|
||||

|
||||
|
||||
Variable can consist of lower-case letters, numbers, as well as `_`.
|
||||
|
||||
@@ -63,15 +30,11 @@ Variable can consist of lower-case letters, numbers, as well as `_`.
|
||||
|
||||
Strings are written as text in quotes (`'` or `"`).
|
||||
|
||||
```
|
||||
DESIGNA x VT "this is a string"
|
||||
```
|
||||

|
||||
|
||||
Strings are concatenated with `&`:
|
||||
|
||||
```
|
||||
DESIGNA greeting VT "Hello, " & "world!"
|
||||
```
|
||||

|
||||
|
||||
`NVLLVS` coerces to an empty string when used with `&`. Note: `+` is for arithmetic only — using it on strings raises an error.
|
||||
|
||||
@@ -106,22 +69,17 @@ Booleans are denoted with the keywords `VERITAS` for true and `FALSITAS` for fal
|
||||
### Arrays
|
||||
Arrays are defined using square brackets (`[]`) and commas (`,`):
|
||||
|
||||
```
|
||||
DESIGNA x VT [I, II, III]
|
||||
```
|
||||

|
||||
|
||||
An array of integers can also be initialized with the `VSQVE` keyword:
|
||||
|
||||
```
|
||||
DESIGNA x VT [I VSQVE X]
|
||||
```
|
||||

|
||||
|
||||
Individual elements can be accessed by index using square brackets. Indexing is 1-based, so `I` refers to the first element:
|
||||
|
||||
```
|
||||
DESIGNA x VT [I, II, III]
|
||||
DICE(x[I])
|
||||

|
||||
|
||||
```
|
||||
> I
|
||||
```
|
||||
|
||||
@@ -129,17 +87,7 @@ DICE(x[I])
|
||||
### SI/TVNC
|
||||
If-then statements are denoted with the keywords `SI` (if) and `TVNC` (then). Thus, the code
|
||||
|
||||
```
|
||||
DESIGNA x VT VERITAS
|
||||
SI x TVNC {
|
||||
DICE(I)
|
||||
REDI(NVLLVS)
|
||||
}
|
||||
|
||||
DICE(NVLLVS)
|
||||
|
||||
> I
|
||||
```
|
||||

|
||||
|
||||
Will return `I` (1), as the conditional evaluates `x` to be true.
|
||||
|
||||
@@ -150,29 +98,17 @@ In conditionals, `EST` functions as an equality evaluation, and `MINVS` (<) and
|
||||
|
||||
When using `SI`/`TVNC` statements, you can also use `ALVID` as an "else".
|
||||
|
||||
```
|
||||
DESIGNA x VT VERITAS
|
||||
SI x TVNC {
|
||||
DICE(I)
|
||||
} ALVID {
|
||||
DICE(NVLLVS)
|
||||
}
|
||||

|
||||
|
||||
```
|
||||
> I
|
||||
```
|
||||
|
||||
`SI` statements may follow immediately after `ALVID`.
|
||||
|
||||
```
|
||||
DESIGNA x VT II
|
||||
SI x EST I TVNC {
|
||||
DICE(I)
|
||||
} ALVID SI x EST II TVNC {
|
||||
DICE(II)
|
||||
} ALVID {
|
||||
DICE(III)
|
||||
}
|
||||

|
||||
|
||||
```
|
||||
> II
|
||||
```
|
||||
|
||||
@@ -180,51 +116,34 @@ SI x EST I TVNC {
|
||||
|
||||
The keyword `ET` can be used as a boolean "and". The keyword `AVT` can be used as a boolean "or".
|
||||
|
||||
```
|
||||
DESIGNA x VT VERITAS
|
||||
DESIGNA y VT FALSITAS
|
||||
SI x ET y TVNC {
|
||||
DICE(I)
|
||||
} ALVID SI x AVT y TVNC {
|
||||
DICE(II)
|
||||
} ALVID {
|
||||
DICE(III)
|
||||
}
|
||||

|
||||
|
||||
```
|
||||
> II
|
||||
```
|
||||
|
||||
## Loops
|
||||
### DONICVM loops
|
||||
|
||||
```
|
||||
DESIGNA x VT NVLLVS
|
||||
DONICVM y VT NVLLVS VSQVE X FACE {
|
||||
DESIGNA x VT x + y
|
||||
}
|
||||
DICE(x)
|
||||

|
||||
|
||||
```
|
||||
> XLV
|
||||
```
|
||||
|
||||
### DVM loops
|
||||
```
|
||||
DESIGNA x VT NVLLVS
|
||||
DVM x PLVS X FACE {
|
||||
DESIGNA x VT x+I
|
||||
}
|
||||
DICE(x)
|
||||
|
||||

|
||||
|
||||
```
|
||||
> XI
|
||||
```
|
||||
|
||||
### PER loops
|
||||
```
|
||||
DESIGNA x VT [I, II, III, IV, V]
|
||||
PER y IN x FACE {
|
||||
DICE(y)
|
||||
}
|
||||
|
||||

|
||||
|
||||
```
|
||||
> I
|
||||
> II
|
||||
> III
|
||||
@@ -237,34 +156,51 @@ Functions are defined with the `DEFINI` and `VT` keywords. The `REDI` keyword is
|
||||
|
||||
Calling a function is done with the `INVOCA` keyword.
|
||||
|
||||

|
||||
|
||||
```
|
||||
DEFINI square(x) VT {
|
||||
REDI(x*x)
|
||||
}
|
||||
|
||||
DICE(INVOCA square(XI))
|
||||
|
||||
> CXXI
|
||||
```
|
||||
|
||||
## Built-ins
|
||||
### DICE
|
||||
`DICE value ...`
|
||||
|
||||
Prints one or more values to stdout, space-separated, with integers rendered as Roman numerals. Returns the printed string.
|
||||
|
||||

|
||||
|
||||
### AVDI
|
||||
`AVDI()`
|
||||
|
||||
Reads one line from stdin and returns it as a string.
|
||||
|
||||
### AVDI_NVMERVS
|
||||
`AVDI_NVMERVS()`
|
||||
|
||||
Reads one line from stdin, parses it as a Roman numeral, and returns it as an integer. Raises an error if the input is not a valid numeral.
|
||||
|
||||
### ERVMPE
|
||||
`ERVMPE`
|
||||
|
||||
Breaks out of the current loop (`DVM` or `PER`). Has no meaningful return value.
|
||||
|
||||
### LONGITVDO
|
||||
`LONGITVDO array`
|
||||
|
||||
Returns the length of `array` as an integer.
|
||||
|
||||
## Modules
|
||||
Modules are additions to the base `CENTVRION` syntax. They add or change certain features. Modules are included in your code by having
|
||||
|
||||
```CVM %MODVLE NAME%```
|
||||

|
||||
|
||||
In the beginning of your source file.
|
||||
|
||||
Vnlike many other programming languages with modules, the modules in `CENTVRION` are not libraries that can be "imported" from other scripts written in the language. They are features of the compiler, disabled by default.
|
||||
|
||||
### FORS
|
||||
```CVM FORS```
|
||||

|
||||
|
||||
The `FORS` module allows you to add randomness to your `CENTVRION` program. It adds 2 new built-in functions: `FORTIS_NVMERVS int int` and `FORTIS_ELECTIONIS ['a]`.
|
||||
|
||||
@@ -273,7 +209,7 @@ The `FORS` module allows you to add randomness to your `CENTVRION` program. It a
|
||||
`FORTIS_ELECTIONIS ['a]` picks a random element from the given array. `FORTIS_ELECTIONIS array` is identical to ```array[FORTIS_NVMERVS NVLLVS ((LONGITVDO array)-I)]```.
|
||||
|
||||
### FRACTIO
|
||||
```CVM FRACTIO```
|
||||

|
||||
|
||||
The `FRACTIO` module adds floats, in the form of base 12 fractions.
|
||||
|
||||
@@ -286,7 +222,7 @@ The symbol `|` can be used to denote that the following fraction symbols are 1 "
|
||||
A single "set" of fraction symbols can only represent up to 11/12, as 12/12 can be written as 1.
|
||||
|
||||
### MAGNVM
|
||||
```CVM MAGNVM```
|
||||

|
||||
|
||||
`MAGNVM` adds the ability to write integers larger than `MMMCMXCIX` (3.999) in your code, by adding the thousands operator, "`_`".
|
||||
|
||||
@@ -295,6 +231,6 @@ When `_` is added _after_ a numeric symbol, the symbol becomes 1.000 times large
|
||||
All integer symbols except `I` may be given a `_`.
|
||||
|
||||
### SVBNVLLA
|
||||
```CVM SVBNVLLA```
|
||||

|
||||
|
||||
The `SVBNVLLA` module adds the ability to write negative numbers as `-II` instead of `NVLLVS-II`.
|
||||
|
||||
Reference in New Issue
Block a user