Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /storage/content/38/170138/mkje.se/rain/php/rain_db_mysql.php on line 126 MKJE.se - Updates - Musa » Pipe syntax
Soooo, I did the thing again. I did create yet another programming language. I call i Musa.
In this post I will talk about a small but useful syntax feature in Musa for piping function calls together.
Alright, let us get some basic syntax out of the way. Musa is based on the old trusty procedural paradigm, in which the function call is the main building block.
Let's begin with a simple example.
addI(1, 20, multI(3, 100))
Result:
123
As you probably already have guessed addI() is a function for adding integer numbers and multI() is a function for multiplying integer numbers. Easy, peasy, straight forward syntax. Ain't it not?
But, there is a problem with the standard procedural syntax. Take a look at this montrosity:
map(str.split(str.trim('aa bbb cccc ddddd '), ' '), <a| str.getSize(a); >)
Result:
[2, 3, 4, 5]
As one is putting function calls as arguments of other function calls things can sometime get a bit messy and hard to grasp.
The expression in words: Take the string 'aa bbb cccc ddddd ', trim any white-spaces from the beginning and end. Split the resulting string into a list of strings using ' ' as a separator. Map into a new list using the lambda expression <a| str.getSize(a); > (more about the syntax for lambdas in Musa in another post).
Oh, there must be a simpler way to express this! But of course there is. Lets use Musas pipe syntax. Enabling us to rewrite the unwieldy monstrosity as:
'aa bbb cccc ddddd ' | str.trim() | str.split(' ') | map(<a| str.getSize(a); >)
The workings of the piping construct is rather simple: The result of the expression to the right of a piping symbol, |, is prepended as the first argument of the function call to the right of the pipe symbol.
Which means that
5 | someFunction(99)
is the same as
someFunction(5, 99)
And
a() | b(5) | c()
is the same as
c(b(a(), 5))
You can use the pipe syntax in any expression. For example as arguments of function calls.
Like this:
a(5 | b(100))
which is the same as
a(b(5, 100))
The pipe syntax of Musa might seem like a minor thing. But the thing is that after getting used to it I have found myself sometimes missing it while writing code in other programming languages.
Mikael K J Eriksson
2015-10-20
mkje.se/p661
Send message to author
Who You are

Your message

This blog is powered by the Grogg blog engine
© Mikael K J Eriksson 2014-2015