Examples
There are some examples of Brat code below, but many more are available on Rosetta Code.
Hello, World
p "Hello, world"
Nice to meet you
print "Hello! What is your name? "
p "Nice to meet you, #{g}."
Print numbers 1 to 10
n = 1
while {
p n
n = n + 1
n <= 10
}
Or, more traditionally:
n = 1
while { n <= 10 }
{
p n
n = n + 1
}
Factorial
fact = { x |
true? x == 0, 1, { x * fact(x - 1) }
}
p fact 5
Fibonacci
fibonacci = { x |
true? x == 0
{ 0 }
{ true? x == 1
{ 1 }
{ fibonacci(x - 1) + fibonacci(x - 2) }}
}
p fibonacci 10
Tak
tak = { x, y, z |
false? y < x
{ z }
{ tak tak(x - 1, y, z), tak(y - 1, z, x), tak(z - 1, x, y) }
}
tak 18 12 6
Extending Objects
Convenience
array.prototype.second = { my[1] }
array.prototype.middle = { my[1,-2] }
p [1 2 3].second
p [1 2 3 4].middle
Let’s get functional?
Note: array.map is actually defined already, but let’s ignore that.
array.prototype.map = { f |
true? my.length <= 0
{ [] }
{ true? my.length == 1, { [f my.first] }, { [f my.first] + my.rest.map ->f } }
}
p [1 2 3].map { x | x + 1}
For Fun
How are you?
how = { x | print "How"; x }
are = { x | {print " are "; x} }
you? = { { p "you?" } }
how are you?
How are you? (Two)
how = { x | p "you?" }
are = { x | print " are " }
you? = { print "how" }
how are you?
How are you? (Three)
how = { x | p "how" + x }
are = { x | " are " + x }
you? = { "you?" }
how are you?
How are you? (Easy)
how = { x | p "how are you?" }
are = { x | }
you? = null
how are you?
How are you? (With array.map)
how = { x | x << "\n"; x.map ->print }
are = { x | x}
you? = ["How", " are ", "you?"]
how are you?
How are you? (Auto-reply)
How = { x | p "How", x[0], x[1] }
are = { x | [" are "] + x }
you? = ["you?"]
I = { x | p "I" , x[0], x[1], x[2], x[3] }
am = { x, y | [" am"] + x + y }
fine = [" fine, "]
thank = { x | ["thank"] + x }
you! = [" you!"]
How are you?
I am fine, thank you!
How are you? (User reply)
How = { x |
x
mood = g
p mood, "? Hmm..."
}
are = { x | { print x } }
you? = "How are you? "
How are you?
Hideous
Yes, this is a (useless) valid program.
a_!?-*+^&@1~\\><$ = new
a_!?-*+^&@1~\\><$.-!_+~%~+_!- = {d0~!@><?&&<>\/+-*^&% | d0~!@><?&&<>\/+-*^&%}
a_!?-*+^&@1~\\><$.@==||------> = { a_!?-*+^&@1~\\><$ }
a_!?-*+^&@1~\\><$.<------||==@ = { my->@==||------> }
@==||------>a_!?-*+^&@1~\\><$ -!_+~%~+_!- a_!?-*+^&@1~\\><$.<------||==@