AsciiDots - A Language Like A Racetrack
Written by Ian Elliot   
Sunday, 10 September 2017

It looks different - ASCII art that computes! AsciiDots is a fun language that might just have something interesting to show us.

asciidots

The basic entity in AsciiDots is the dot . which roughly speaking is a variable that rushes around a track made up of | and -. You can also use \ and / to make corners and + to make tracks cross over without interaction.  The symbols ><^V make T connections with the dot moving in the direction the symbols point at the T.

So, for example:

    /--------->-------
    |      |
    \------/

is a loop. A dot that come in on the right goes around the loop and exits the way it came in. A program starts with a dot and ends when it exits the track or when it passes over an &.

A dot starts off with a default id and a value of zero and as it races round the track it meets operators which change the value or id.

asciidotexample

For example: # sets the value and @ sets the id.

So:

---#7---

sets the dot's value to seven as it passes over.

The $ operator outputs a string to the console when the dot passes over so, at last, the "Hello World" in AsciiDots is:

.-$"Hello, World!"

Notice that programs don't have to go left to right and top to bottom. You can start a program from any location and the dot will follow the track. This is disturbing to most programmers.

The ? is an invitation for input and is only used after # or @. You can also use ( and ) to reflect dots back to where they came from. Be warned, * is not multiplication in the usual sense, instead it duplicates a dot and sets the copies off on alternative paths.

What about conditionals?

A language cannot be Turing complete without conditionals and AsciiDots has a very simple conditional - the tilde ~. This redirects the dot passing through it horizontally upward if the dot below is zero. You can turn that into a "not zero" by putting an exclamation mark below the tilde. So, using the example from the manual:

  /-$"The value is not equal to zero"
  |
.-~-$"The value is equal to zero"
  |
  ?
  #
  |
  .

This prompts the user for a value and prints an appropriate message.

There are lots of other operators you can use to change the value of a dot and you can find out about them in the manual. The key idea is that a dot will wait for other dot at an operator. For example, to add two values together:

.-#?-{+}-$#
      |
.-#?--/

 

There are some advanced features such as warps and libraries but this is the essence of the language.

There is one important thing to make clear - you can have multiple dots moving along tracks at the same time and a dot will wait for another dot when it meets an operator.

So great fun but why bother?

Well playing with languages, no matter how odd is a good way to fund out what might ore might not work. Asciidot is also an example of a data flow language where data flows though a network of operations as fast as it can go. It is a good way to implement parallel processing. Finally you can see the flow of control in Asciidot and it might be a good way to get beginners started.

My only comment after using it for a short while is that it is a bit tedious to have to keep on typing all those spaces needed to align characters vertically. It's a lot easier to build things horizontally. Can this be overcome by a custom editor? Also aligning vertically is difficult and finally don't try to show someone your program in a font that isn't mono-spaced.

Asciidots is an open source program and you can try it out online.

 asciidotsicon

 

More Information

AsciiDots - Esoteric Language

Related Articles

Arnold C A Schwarzenegger Based

Frank

Dolphin Smalltalk Goes Open Source

NoFlo Kickstarter For Easy Programming

 

To be informed about new articles on I Programmer, sign up for our weekly newsletter, subscribe to the RSS feed and follow us on, Twitter, FacebookGoogle+ or Linkedin.

 

 

Banner


Perl for the Web: Mojolicious 8.0 Released
24/09/2018

Far gone are the days when you wrote Perl for the web in just CGI. Dancer, Catalyst and Mojolicious are the modern ways of going about it, with Mojo's version 8.0, code-named "Supervillain", being rel [ ... ]



Google is 20, GNU is 35; Why No GNUgle?
27/09/2018

This week 20 years ago Google was born in a garage, so fitting in with the Silicon Valley creation story; 35 years ago the GNU open source project was announced. Two great, but very different, events. [ ... ]


More News

 

Python

 



 

Comments




or email your comment to: comments@i-programmer.info

Last Updated ( Sunday, 10 September 2017 )