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}."
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~\\><$.<------||==@
Fork me on GitHub