Disclaimer: The following is a diversion from BeerRiot. To all
Rioters waiting on new features, I apologize. I can only claim
temporary insanity due to cold.
I ran across two interesting Erlang posts
first was to the Trapexit help form, where someone was
attempting to implement
interpreter in Erlang, as a way of learning the language. I
didn't understand the question being asked, so I decided to give
it a go myself, to see if I ran into a similar question.
A little while later, this is the implementation I had:
Basically, a list for what is to the left of the current execution
point, and another for what is to the right, as well as a list
each for what is to the left and right of the current data point.
Just tail-recurse through the right list (with a little extra
jumping for the loop operators), pattern matching the opcode at
the head of the right program list. Run the program by calling
bf:run(Program) where Program is just a list of characters
(including Brainfuck symbols if you want any result other than 0).
For example, the following code will print out "Hello World"
(found on the Wikipedia page).
The second post I
happened across was someone noticing the alternative way to make
Erlang atoms (by enclosing characters in single
were unhappy that they had never found a good use for
functions named using these atoms.
Well, guess where that thought took me:
Basically, create a function named for each Brainfuck operator.
Then, convert all of the valid Brainfuck operators in the program
into atoms, and use them to call the functions sharing their
names. Run it just like the earlier example, bf2:run(Program).
Now, I'm not going to call the first implementation ugly. In
fact, I think it's a fair example of walking a list, doing
different things depending on the value of the head of the list.
But, I have to say that The second version does read a bit nicer,
in some respects. (I also tried using the tape record in the
first example, but I thought it made things worse.)
Yeah, okay, Brainfuck clearly still isn't a great use for
quirky-atom function names, but perhaps it represents some problem
space that can make good use of them?
Anyone have a better neat trick - for either Brainfuck
interpretation or funky-atom function names?
P.S. My apologies for not posting an answer to Alboin (the
Trapexit poster). I can't remember my login details for Trapexit.