az
Jump to navigation
Jump to search
az is an esoteric programming language drawing inspiration from all-over.
a3 b5 i1 [ c0! ca+ cb+ ac0+! [? a3 s"Fizz".0] bd0+! [? b5 s"Buzz".0] cd|! [? i# d0] 10. c1i+ c101^ ? ]
Design
- Each command is a single ascii character.
- White space is optional and comments are ( in parens ).
- There are 26 local variables named a-z.
- Specifying a variable makes it current.
- Commands always execute on the current variable.
- The previous current variable is tracked too (like a 2-cell stack).
- Integer literals are specified directly in base 10.
- String literals are supplied as double-quoted strings.
- Words of three or more letters are global named variables.
- Functions are first-class, passed as integer references.
- Zero is false. Non-zero is true.
Commands
Cmd | Description |
---|---|
(
|
Start comment |
)
|
End comment |
a-z
|
Make local variable current |
A-Z
|
Make outer variable current (calling scope) |
"..."
|
current = string |
0-9
|
current = integer |
[
|
Begin loop |
?
|
Break loop if current is false |
]
|
Repeat loop |
{
|
Start function |
}
|
End function, current = function reference |
#
|
Output integer |
;
|
Call function in current |
+
|
current = current + previous |
-
|
current = current * -1 (negate) |
<
|
current = current << previous (shift left) |
>
|
current = current >> previous (shift right) |
&
|
current = current AND previous |
|
|
current = current OR previous |
^
|
current = current XOR previous |
!
|
current = (current == 0) ? -1: 0 |
\
|
current = (current < 0) ? -1: 0 |
,
|
Read character from stdin |
.
|
Write character (or string) to stdout |
$
|
Execute system shell command |
@
|
Make local variable current (by numeric index) |
word
|
Make global named variable current |
Fibonacci
a0 b1 [ b# c32.0+ ac+ ba0+ cb0+ cd100-+\ ?]
Factorial
a1 b5 c0! [ ad0+ be0+ [ce+?da+] cb+ ?] a# 0
Beer
d { B"s" Aa1^! [?B0] } e { a"#A bottle$B of beer on the wall,".10. } f { a"#A bottle$B of beer.".10. } g { a"Take one down, pass it around,".10. } h { b"#A bottle$B" Aa0+! [? b"No bottles" a0] b. } i { a" of beer on the wall.".10.. } a99 [ a? d; e; f; g; c0!a+ d; h; i; ] 0
Brainfuck
( 64k source, 64k tape ) a32768@ ( read source to cell 26 ) a26 [ b,? a@0+ c1a+ ] ( tape pointer ) a16384 ( source pointer ) b26 ( bracket tracking ) x { EG^! [? a1F+ z] EH^! [? a0!F+ z] } [ b@c0+ ? (c = command) c (>) d62 ^! [? 1a+ z] c (<) d60 ^! [? 0!a+ z] c (+) d43 ^! [? 1a@+ z] c (-) d45 ^! [? 0!a@+ z] c (.) d46 ^! [? a@. z] c (,) d44 ^! [? a@, z] c ([) d91 ^! [? f1 a@d0+! [? e1 b+@e0+ g91 h93 x; f ]] c (]) d93 ^! [? f1 a@d0+ [? e0! b+@e0+ g93 h91 x; f ]] c1b+ ]