Labra
Labra is an esoteric programming language created by User:DoggyDogWhirl.
"Labra" stands for "LAzy BRAckets", as it uses lazy evaluation and uses only brackets () [] {} <> as symbols.
Overview
As previously mentioned, the only symbols used are ()[]{}<>.
This means that Labra code may look similar to code in Brain-Flak or BracketsLang.
Like those languages, all brackets in Labra code must be matched.
Unlike them, Labra uses the newline \n to separate sections of code.
Also, Brain-Flak is stack-based, BracketsLang is cell-based, and Labra is neither.
(I think it's declarative. I don't know.)
Labra uses two data types, integers and lists. Lists may be infinite, and may contain other lists. Labra uses 0-indexing.
Input and output are a list of numbers. ASCII is not used; "23" as input gives 23, and outputting 23 shows "23". Labra prints out the result of the last line, and the results of any OUTPUTs it finds along the way.
In Labra, a set of brackets may have a result inside and/or a result to its left, or neither. The arguments a set of brackets has determines its function.
| Arguments | ( ) | [ ] | { } | < > |
|---|---|---|---|---|
Niladic_() |
ONE Returns 1. () → 1 |
ZERO Returns 0. [] → 0 |
ARGUMENT Input, or argument into function. {} → input |
PREVIOUS The result of the previous line. ()<> → 1
|
Monadic_(X) |
SUM Sum of X. (1,2) → 3 |
INDICES The list of numbers up to X or the length of X. [3,5,0] → 0, 1, 2 |
REPEAT The infinite list of only Xs. {1} → 1, 1, 1, 1, ... |
CALL The result of line X. ()<0> → 1
|
AppliedA() |
ADD ONE Adds/appends 1. 2() → 3 |
ENCLOSE Puts A in a list. 5[] → 5, |
OUTPUT Prints A. 1{} → 1 |
INVERT -A. If list, swaps indexes and items. 4,2<> → ?, ?, 1, ?, 0
|
DyadicA(X) |
ADD Adds/appends X. 2(3,1) → 2, 3, 1 |
INDUCTION The infinite list of X solved repeatedly. {} is initially set to A.1[{}()] → 1, 1+1, (1+1)+1, ... |
MAP Solves X for every element of A. {} is set to elements of A.2,3,4{{}()} → 2+1, 3+1, 4+1 |
INDEX Gets the Xth element of A. 5,5,1<2> → 1
|
Examples
2
Outputs 2.
()()
Cat program
{}
Truth-machine
{}
{{}}
<{}>
Hello, world!
Prints the ASCII values.
[][{}()()()()()()()()()()()()] 0,12,24,...
<[]><()()()()()()> H
<[]><()()()()()()()()>()()()()() e
<>()()()()()()(){} ll #The l OUTPUTted is the one printed first
<>()()() o
<[]><()()()>()()()()()()()() ,
<[]><()()>()()()()()()()()
<()()()()>()()()()()()()() w
<()()()()> o
<()()()()>()()() r
<[]><()()()()()()()()()>()()() l
<[]><()()()()()()()>()()()()() d
<()()()()()()>() !
<[<()><()>]{{}()}>
Anything that isn't a bracket or newline is a comment.
Fibonacci sequence
()[]()[{}<()>[](({}))]{{}<[]>}
()[]() 1,1
[
{}<()>[] 1,
(({})) 1,(1+1)
] [1,1],[1,2],[2,3],...
{{}<[]>} 1, 1, 2, ...
Implementation
I made a Haskell implementation, but it can't OUTPUT. It can be found here.
I tried to make Python implementation using iterators, but it activates every OUTPUT, can't CALL, and is buggy in general.
At this rate I might have to learn a new language to actually implement it in...