We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.
Talk:Lingua Indeterminatum
I think you shouldn't copy Septem Lingua directly. In this language(project?), we'll build the language STEP BY STEP. -- i s l p t n g 07:37, 22 June 2026 (UTC)
First of all, let's figure out the data types.
- Integers. Integers are just integers and there is no limit of it. For example, 8, 9, or 114514.
- Floating-Point numbers. All real numbers are valid floating-point numbers, if the includes a dot. For example, 1.41421356.
- Document. Quoted in double quotation mark. Escape same as Python.
- Rune. A character quoted in [| |].
- Logical Value. Either true or false.
- NULL. Just null value, nothing much.
- Lambda. A lambda is a special type; it has parameters, a code block, can return a value, but has no name. It can be assigned to a label, so the lambda becomes a real function in the true sense.
- A list. It's just a list enclosed in square brackets. You can store anything in it.
- Ordered pairs. Two data enclosed in parentheses.
- Complex numbers. I mean complex numbers in the mathematical sense.
- Type. Type is just type itself. For example, if we cast 1 into type type, then we will got integer.
--PSTF
And by the way, I'd like to have a unique yet friendly syntax.
Accepted, except the Rune type initialization. Why not just use a single quotation mark, or @ like Uiua and SletScript? -- i s l p t n g 08:03, 22 June 2026 (UTC)
P.S. Where is the Type type, or how do you deal with typeof and isinstance?
The next part is the syntax.
- Variables:
- List:
- Code block:
- Function call:
- Lambda Notation:
- Operators:
By the way, do you have a GitHub account or a QQ/WeChat one? So that we can discuss off wiki.
- Yes, both WeChat and GitHub, and I have also an email one.
Variable
A variable consists of a label, a type, and a value. When assigning a value to a variable, you need to use a left-pointing arrow (<-).
Unless otherwise specified, "" represents an empty string, and ∅ represents an empty list.
When initializing, you also need to specify the variable type, but when reassigning later, you don’t need to. If there’s no explicit type but a value is given, the type will be inferred from the value. If there’s no initial value but a type is given, the variable will be assigned an empty value (number 0, float 0.0, complex 0+0i, "", ∅, pair (0, 0), a do-nothing code block, or the logical value false).
Comment
<!-- I'm a comment block -->
Code Block
Code blocks, unless they're the very bottom main block, should be enclosed in curly braces, and each line of code should end with a semicolon. This means Lingua Indeterminatum doesn't recognize the end of a line, which also makes Code Golfing easier.
For example, this is a valid code block which asks for length and width, and calculate the area of the rectangle.
a = Int(read); b = Int(read); write a*b;
Alright, now: Figure out all the keywords, and go implement the lexer and parser. [CraftingInterpreters.com Crafting Interpreters] is a great book. -- i s l p t n g 09:03, 23 June 2026 (UTC)
Keyword List
This list is sorted in functional order.
Constants
False Infinity NaN NULL True
Conditional Flow
if elif else
Looping
for while until forever
Function
function
Data type
Int Float Rune Doc Bool Void Lambda List Pair Comp Type
Logical Calculation
and or ! xor
Breaking
break continue halt
Variable-related
const volat private protected public