fix things, add things

This commit is contained in:
Scott Richmond 2024-06-15 22:40:58 -04:00
parent 84de1dae6c
commit fcf3e4cdbe

View File

@ -15,9 +15,9 @@ Ludus has four types of atomic values.
`true` and `false`. That said, in all conditional constructs, `nil` and `false` are "falsy," and everything else is "truthy." Their type is `:boolean`. `true` and `false`. That said, in all conditional constructs, `nil` and `false` are "falsy," and everything else is "truthy." Their type is `:boolean`.
### Numbers ### Numbers
Ludus has numbers. At current, they rely on underlying number types. When Ludus runs in the browser, numbers are Javascript 64-bit floats. When Ludus runs at the command line in JVM-based Clojure, Ludus numbers could be ints, floats, or ratios, depending. Numbers are more complicated than you think. Ludus has numbers, which are IEEE-754 64-bit floats. Numbers are more complicated than you think, probably.
Number literals in Ludus are either integers or decimal floating point numbers. Number literals in Ludus are either integers or decimal floating point numbers, e.g. `32.34`, `42`, `-0.23`. Underscores in numbers are ignored, and can be used to separate long numbers, e.g. `1_234_567_890`.
Numbers' type is `:number`. Numbers' type is `:number`.
@ -40,7 +40,7 @@ Strings use backslashes for escapes, including `\n` for newline, `\t` for tab, `
Strings' type is `:string`. Strings' type is `:string`.
### String interpolation ### String interpolation
Strings may also insert a string representation of any Ludus value that is bound to a name, by inserting that name in curly braces, e.g. Strings may also insert a string representation of any Ludus value that is bound to a name, by inserting that name in curly braces. To wit,
``` ```
let foo = :foo let foo = :foo
let bar = 42 let bar = 42
@ -93,6 +93,11 @@ Ludus provides functions that allow working with persistent collections. They're
## Expressions ## Expressions
Ludus is an expression-based language: all forms in the language are expressions and return values, except `panic!`. That said, not all expressions may be used everywhere. Ludus is an expression-based language: all forms in the language are expressions and return values, except `panic!`. That said, not all expressions may be used everywhere.
### Terminating expressions
Expressions in scripts and blocks are terminated by a newline or a semicolon. In compound forms, like, `if`, the terminator comes after the `else` expression.
In forms with multiple clauses surrounded by curly braces (i.e., function bodies, `match`, `when`, etc.), you may separate clauses with semicolons as well as newlines.
### Toplevel expressions ### Toplevel expressions
Some expressions may only be used in the "top level" of a script. Because they are the toplevel, they are assured to be statically knowable. These include: `pkg`, `ns`, `use`, `import`, and `test`. (NB: not all of these are yet implemented.) Some expressions may only be used in the "top level" of a script. Because they are the toplevel, they are assured to be statically knowable. These include: `pkg`, `ns`, `use`, `import`, and `test`. (NB: not all of these are yet implemented.)
@ -205,7 +210,7 @@ let first = {
add (outer, inner) add (outer, inner)
} & first is now bound to 65 } & first is now bound to 65
inner & Validation error! unbound name inner inner & Validation error: unbound name inner
``` ```