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.
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.
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.
Though I guess FiM++ isn't well suited for scientific purposes. Too bad, because then I could have doubled my fun at work
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!
Today I learned recursion.
I remembered recursion!
That's all about recursion.
Your faithful student, Kyli Rouge.
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.
"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 ^^
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
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.
but doesn't that look similar to Camouflage? I accidentally stumbled upon it on the site you've linked in description.
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.
Glad you enjoyed it.
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~?
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!
Let's collaborate in this Google Doc: [link] note me your email so you can edit it, too.
I do assembly level programming, and also know Java, and a little bit of a bunch of other languages, including Python; thus I'm comfortably familiar with how programming languages in general work.
I've already got a sort of syntax worked out for this; I can email it to you if you'd like to look over it.
Also, has anyone told Cereal about this collaboration yet? XD
I could use an assembly PoV.
Nah, let's let him find out, by himself >;D
I'm more familiar with Python than with C++ too, that's why I did it in Python
Here it is. It uses python to translate FiM++ to Python and then executes it as Python. It comes with a command line tool.
Oh yea, and when you said "That's about Applejack's Drinking Song with Applejack" you probably didn't have to say "with Applejack" again, because it was already connected.
But I love the code as is, or rather, the idea. Hopefully PK can put all our different versions into a full language. ^.^
The bracket for the function will need a bit more attention, as you've mentioned. I'll probably have to fix the function call as well, so that the code actually calls the function to execute.
Glad you enjoyed it as much as I did
Today I learned that there are a lot of primes.
I learned about testing with a number.
Did you know that many is a number minus 1?
I did this many times,
Did you know that Pinkie Pie likes a number modulo many?
When Pinkie Pie liked zero and many had more than 1,
I said "Pinkie! 'a number' isn't prime!".
That's about testing.
That's what I did.
Did you know that many had less?
That's what I did.
When many was 1, I said "Pinkie! 'a number is prime!". That's what I did.
That's about testing.
Did you know that Pinkie Pie likes 3?
I did this while Pinkie Pie had more than 0.
That's about the testing with Pinkie Pie!
That's what I did.
Your faithful student, Twilight Sparkle.
P.S. There are still a number of parts of the spec that need to be nailed down, but I think this letter is somewhat correctly written...
Guess considering them to be a book would be ideal since both are indexed in exactly the same way (suppose FiM++ uses 1 based arrays)
I found a book titled "Numbers" today and it was full of numbers // var int *Numbers
On the 1st page of the book "Numbers" I wrote 9. // Numbers[1] = 9
On the 2nd page of the book "Numbers" I wrote what I knew about Applejack. // Numbers[2] = Applejack
On the 1st page of the book "Numbers" I read about Applejack. // Applejack = Numbers[1]
I used "about" because otherwise it just feels awkward. Oh and I guess FiM could have variables with spaces in them since it would only make sense to write 'Rainbow Dash' rather than Rainbow_Dash in a letter.
Comments
How about using "Because" for a comment line? It would work really well for explaining weird behavior to the princess that you'd kind of need for a programming language (like destroying something).
I tore out some pages out of the book "Numbers" so now there's only 3 pages left because the other pages were ruined.
The way I'm thinking of this language is, that each line effectively becomes a sentence and ends with a period, so that the compiler/interpreter would have an easier time reading through the code based on the location of periods. Perhaps the interpreter can read ", because" or Because as a line comment as in //(C++) or #(Python).
Thanks for the attention, by the way
Initiate comment: By the way, <comment>.
Finish comment: Back to topic. / But I digress. / Anyway,
=> This is essentially /* */ in c++.
By the way, <I / pronoun / var_name> <says/said> "".
=> This is a one line comment, with strings inside the "" being the content. This is nearly equivalent to // in c++, or # in python.
What do you think?