literature

FiM++ Programming - Hello World, 99 Jugs of Cider

Deviation Actions

DeftCrow's avatar
By
Published:
75 Comments
25K Views

Literature Text

Dear Princess Celestia: Letter One

Today I Learned an important lesson about friendship.

I learned how to write "Hello World!"

Your faithful student, Twilight Sparkle.

P.S. In this case, the syntax is similar to C++.

----------------------------------------------------------------------

Dear Princess Celestia: Letter One

I wrote "Hello World!"

Your faithful student, Twilight Sparkle.

P.S. In this case, the syntax mirrors that of Python syntax. I'll leave it to you, readers, to decide which one you deem better. -Twilight Sparkle

----------------------------------------------------------------------

Dear Princess Celestia: Letter One

Today I learned how to sing Applejack's Drinking Song.

I learned Applejack's Drinking Song with Applejack.

Did you know that Applejack likes the number 99?

I did this while Applejack had more than 1.
I sang " 'Applejack' jugs of cider on the wall, 'Applejack' jugs of cider,"
Applejack got one less.

When Applejack had more than 1,
I sang "Take one down and pass it around, 'Applejack' jugs of cider on the wall."
In the end, I did this instead.
I sang "Take one down and pass it around, 1 jug of cider on the wall.
1 jug of cider on the wall, 1 jug of cider.
Take one down and pass it around, no more jugs of cider on the wall."
That's what I did.

In the end, I did this instead.
I sang "No more jugs of cider on the wall, no more jugs of cider.
Go to the store and buy some more, 99 jugs of cider on the wall."
That's what I did.

That's about Applejack's Drinking Song with Applejack!

Your faithful student, Twilight Sparkle.

P.S. Twilight's drunken state truly frightened me, so I couldn't disregard her order to send you this letter. Who would have thought her first reaction to hard cider would be this... explosive? I need your advice, your help, everything, on how to deal with her drunk... self. -Spike
When I saw the post for FiM++, I couldn't resist.

EqD Post: [link]

99 Bottles of Beer: [link]

I know the above is probably the worst way to implement 99 Bottles of Beer in the world, but I tried to keep it in a way that remotely resembles a letter to Princess Celestia.

For the name of the language, I humbly suggest... "Friendship Reports." With the actual period. (Abbreviated: FR., read "Ef Ar Dot.") Because dots are obviously important. You'll understand if you have played EVE long enough.

=> "Today I Learned..." : Main() function. Takes no arguments. May be omitted for letters without lessons(functions).
=>=> "an important lesson about friendship." : Generic opening statement.
=>=> "<comment>": Opening statement with comment on the entire letter(code). Everything written after "Today I Learned..." is considered a comment until the next period.

=> I sang / wrote / said "" : print("")
=>=> I sang "... '<var>'" : print("... '<var>'")
=> I learned <name> (with <var>).: Define function as <name>, taking <var> as arguments.
=> => That's about <function_name> (with <arg>)! : End function definition.

=> I learned <how to> <method>.: Perform single <method>. Method ends at next period.

=> got/had <num> more : +<num>
=> got/had <num> less : -<num>

=> When <var> had more than <value> : if <var> > <value>
=> I did this while <var> <comparison> <value> : for (<var> <comparison> <value>)
=>=> That's what I did. : General closing statement for all at"I did this while" and "When" (while / if) statements.

=> Did you know that <var> is/likes (the <type>) <value>? : Assign value with enforced type.

=> P.S. : Text comment, as in // .
=> By the way, <content>.: In-line comment with <content>. Comment ends at next period. (Similar to /* */ in C++.)

Ver. 0.01A - Modified "if" statements as "When," as per croaklieuhunt's input.
Ver. 0.01B - Added "That's what I did.", general closing statement for all "When" and "I did this while" statements.
Ver. 0.02 - Decided on main() function. Updated "Hello World!" program to make sense. Updated description with function definition. Updated description for performing a single method.
© 2012 - 2021 DeftCrow
Comments75
Join the community to add your comment. Already a deviant? Log In
SomaticHaberdashery's avatar
A strange yet beautiful thing.
ChipBiscuit's avatar
This is brilliant! Terribly inefficient, but it makes up for it with style points alone. I might try writing something in this and show it off in my programming course!
dAgreatMeowflash's avatar
This is a simple language and needs to be a real one.  I made a Deadfish interpreter using it!  I wonder if you could make a text-based game using FiM++...
The-Doctor-W's avatar
I am a rookie at Python, but I am knowledgeable enough to say:

This language is crazy.

It seems a bit flawed, and it takes several words to do something.

I can't see any apps or programs being written with this, but it is fine simply for the novelty of it all.
Wolf-mane's avatar
This is silly and as a programmer I love it!
Pekusiili's avatar
I'm like super late to the party, but this is amazing! I'm gonna take some time to learn about this stuff, and once a working compiler or whatever is out, I'll start writing some programs :)

Though I guess FiM++ isn't well suited for scientific purposes. Too bad, because then I could have doubled my fun at work :D (unless someone writes an extension for Python...)
Supuhstar's avatar
Sup, bronies! So I find that this is an original source of material for the language, so I feel it's my duty to put this here. I've made the language completely usable and many of us are racing to build the best compiler. It's currently defined in a Google doc and even has its own wiki!

Not only is is consistent and unambiguous, but it can still be read as a letter! I hope you guys like what it's become, and feel free to contribute your opinions!
Supuhstar's avatar
Dear Princess Celestia: This can get confusing.

Today I learned recursion.
I remembered recursion!
That's all about recursion.

Your faithful student, Kyli Rouge.
DeftCrow's avatar
"Dear Kyli Rogue,

The five lines of code you gave me earlier brought me much joy,
more so because they arrived at the opportune moment of the end of today's day court.

You have my gratitude for your contributions to the development of the new cipher, hereby known as FiM++.

May your name be known in the history of logicians that helped Equestria become the nation as it stands today.

Best wishes,
Princess Celestia of Equestria."


Oh, I almost forgot. Would you be able to give me access to the first page?
While I myself is not much of a programmer, I should be able to write a foreword that details the purpose and quirks of the language. My user name there is SingleCrystal.
Supuhstar's avatar
oh, well if Celly is sending this, I'll FWD it to my MLP OC XP
"Your Highness Celestia,

It's been a pleasure working for Equestria to bring the everypony into the modern era. You can count on me if you ever need anything.

Humbly yours,
~Digit Shine"

As I said in the chat, simply click the blue "Share" button and do what is says, and I'll be able to add you :3

I'll make a space for your foreword ^^
HackalotSpark's avatar
Is there a website where I can learn all this? I want to learn it Dag nabbit!
sapphire475gs's avatar
The first two sets didn't immediately strike me as code... but for that last one, it was hard to miss the conditional statements. I'm at least glad I could determine that P.S. was your commenting system. I'm an electrical engineering major that hasn't really pursued programming past some basic C (and a hint of Java), but this is really neat!
Roxanne13579's avatar
This is just awesome xD
I mean, I've been working with C# for over a year now and I really like working with it, but I think this'll be my new favourite language xD

Right now though, I have to learn how to work with a functional language: Haskell @_@
Gah, gimme FiM++ plox xD
I'm reading the syntax specification from the Equestria Daily post ([link]) and I'm unsure about one thing. Do you have to close the main function i.e. the "Today I learned" function declaration? I would assume since it's c/java like you need to close the main function with the function close syntax "That's all about <function name>!"

In the first and second examples you should need to close the "an important lesson about friendship" function with "That's all about an important lesson about friendship!". I'm also confused with your if statement with two elses in the second example... I assume you're trying to say "go to the store and buy more cider" when the while loop is finished. If that's true you need to add an end to your while loop and place the last line of "100 bottles of cider" outside the for loop.

In this example you also declare the main function (how to sing applejack's drinking song) but never call your Applejack's drinking song function or do anything with the return (with Applejack implies you're going to return an object of Applejack type).

Therefore the implementation of "100 bottles of cider" should look more like this:

Dear Princess Celestia: Letter One

I learned applejack's drinking song.

Did you know applejack's number is 100?

I did this while applejack's number was greater than 0:

I sang applejack's number " bottles of cider on the wall " applejack's number " bottles of cider ".
applejack's number is one less.

If applejack's number was greater than 1,
I sang "take one down, pass it around, " applejack's number " bottles of cider on the wall".
That's what I did.

Otherwise,
I sang "take one down and pass it around, no more jugs of cider on the wall."
That's what I did.

That's what I did.

I sang "No more jugs of cider on the wall, no more jugs of cider. Go to the store and buy some more, 99 jugs of cider on the wall."

That's all about applejack's drinking song!

Today I learned a new song.

I remembered applejack's drinking song.

That's all about a new song!

Your faithful student, Twilight Sparkle.
SkyshadowMeadow's avatar
I'm not much of a programmer, I just started learning the very basics this year
but doesn't that look similar to Camouflage? I accidentally stumbled upon it on the site you've linked in description.
DeftCrow's avatar
There are many esoteric languages that use natural language as basic syntax and follow very specific formats. The closest to FiM++ would be Chef and Shakespeare.
dervonnebenaan's avatar
This is one of the best examples for what ponykind can achieve. Knowing that by now, the programming language is about to be completed, interpreters on their way... Holy shit! A Turing-complete, object- orientated pony programming language?
When I first heard about it, I spent a good quarter of an hour laughing hysterically. I will definitely learn this language once it's finished.
DeftCrow's avatar
That was exactly the reason I picked up my rusty Python and went for it; all for good fun :)
Glad you enjoyed it.
SuperSonic68's avatar
This... Is really cool. I read the entire document and understood every bit of it! I don't even know Java, only C++ so far!
Oh my. Can it run minecraft?
DeftCrow's avatar
Since the syntax of the finalized language would mirror that of Java, the same language Minecraft is written with, Brony programmers would be able to rewrite the entire source code in FiM++. At least theoretically.
MADgehog's avatar
Supuhstar's avatar
I'm an actual programmer.
I was able to make parsers for other esoteric languages.
I want to make a parser for this.
I want to make a full language specification for this.
May I please~?
DeftCrow's avatar
I say, go for it! It can either be an independent effort, or a collaboration between the guys who replied below.

The specifications given at Cereal's post is a bit wonky, so this is the list of stuff that has to be addressed to make FiM++ a more usable language:

=> Name? I'd probably say "Friendship Reports".
=> Compiled Language? Interpreted Language?
=> What will the tense of the key lines be? So far they're all in past tense, which I like because writing as if everything happened before provides the benefit of automatic rubberducking.
=> Need a better main() function, such as Today I learned an important lesson about friendship., "an important lesson about friendship" being main(). (Or, if we're using Python syntax, there won't be a need for the main function at all.)
=> Need a better way of making function calls.
=> Needs basic arithmetic support, i.e. multiplication, division, etc.
=> Implementation of printf() or Python print?
=> Importing external modules, complete with letter-like language. Language to write external modules.


Good luck to you and everyone involved in the language!
Join the community to add your comment. Already a deviant? Log In