# FizzBuzz

## Slightly modified example of thesis: Figure 4.4, page 87

The colm language has evolved since it has been described in the thesis. With some modifications we can reactivate this example.

figure_44.lm

    i: int = 0
    j: int = i

    while ( i < 10 ) {
        if ( i * ( 10 - i ) < 20 ) {
            print ( "hello ", i, ' ', j , '\n' )
            j = j+ 1
        }
        i = i + 1
    }

Please Note:

- the syntax is very c-ish

- the variables are defined with their type

- there is no postfix increment operator (i = i +1)

    /opt/colm/bin/colm fizzbuzz.lm
    ./fizzbuzz

That gives us:

    hello 0 0
    hello 1 1
    hello 2 2
    hello 8 3
    hello 9 4

## Real FizzBuzz

The fizzbuzz test is often used to check if someone has programming skills. It is the next logical step to hello world.

fizzbuzz.lm

    int modulo( value:int, div:int) {
        times:int = value / div
        return value - ( times * div )
    }

    i:int = 0
    while( i < 20 ) {
        mod5:int = modulo( i, 5 )
        mod3:int = modulo( i, 3 )
        if ( mod5 == 0 && mod3 == 0 ) {
            print( "FizzBuzz\n" )
        } elsif( mod5 == 0 ) {
            print( "Buzz\n" )
        } elsif( mod3 == 0 ) {
            print( "Fizz\n" )
        } else {
            print( i, "\n" )
        }
        i = i + 1
    }

It appears that there is no modulo operator (%). Therefor we’ll resort to a function. Writing a function seems rather straight forward.

Please note: * that && is working. * The return type is needed, but if nil is returned by default.

    /opt/colm/bin/colm fizzbuzz.lm
    ./fizzbuzz

That gives us

    FizzBuzz
    1
    2
    Fizz
    4
    Buzz
    Fizz
    7
    8
    Fizz
    Buzz
    11
    Fizz
    13
    14
    FizzBuzz
    16
    17
    Fizz
    19