learnxinyminutes-docs/LOLCODE.html.markdown
2017-07-04 13:24:03 -07:00

186 lines
5.1 KiB
Markdown

---
language: LOLCODE
filename: learnLOLCODE.lol
contributors:
- ["abactel", "https://github.com/abactel"]
---
LOLCODE is an esoteric programming language designed to resemble the speech of [lolcats](https://upload.wikimedia.org/wikipedia/commons/a/ab/Lolcat_in_folder.jpg?1493656347257).
```
BTW This is an inline comment
BTW All code must begin with `HAI <language version>` and end with `KTHXBYE`
HAI 1.3
CAN HAS STDIO? BTW Importing standard headers
OBTW
==========================================================================
================================= BASICS =================================
==========================================================================
TLDR
BTW Displaying text:
VISIBLE "HELLO WORLD"
BTW Declaring variables:
I HAS A MESSAGE ITZ "CATZ ARE GOOD"
VISIBLE MESSAGE
OBTW
(This is a codeblock.) Variables are dynamically typed so you don't need to
declare their type. A variable's type matches its content. These are the
types:
TLDR
I HAS A STRING ITZ "DOGZ ARE GOOOD" BTW type is YARN
I HAS A INTEGER ITZ 42 BTW type is NUMBR
I HAS A FLOAT ITZ 3.1415 BTW type is NUMBAR
I HAS A BOOLEAN ITZ WIN BTW type is TROOF
I HAS A UNTYPED BTW type is NOOB
BTW Accepting user input:
I HAS A AGE
GIMMEH AGE
BTW The variable is stored as a YARN. To convert it into NUMBR:
AGE IS NOW A NUMBR
OBTW
==========================================================================
================================== MATH ==================================
==========================================================================
TLDR
BTW LOLCODE uses polish notation style math.
BTW Basic mathematical notation:
SUM OF 21 AN 33 BTW 21 + 33
DIFF OF 90 AN 10 BTW 90 - 10
PRODUKT OF 12 AN 13 BTW 12 * 13
QUOSHUNT OF 32 AN 43 BTW 32 / 43
MOD OF 43 AN 64 BTW 43 modulo 64
BIGGR OF 23 AN 53 BTW max(23, 53)
SMALLR OF 53 AN 45 BTW min(53, 45)
BTW Binary notation:
BOTH OF WIN AN WIN BTW and: WIN if x=WIN, y=WIN
EITHER OF FAIL AN WIN BTW or: FAIL if x=FAIL, y=FAIL
WON OF WIN AN FAIL BTW xor: FAIL if x=y
NOT FAIL BTW unary negation: WIN if x=FAIL
ALL OF WIN AN WIN MKAY BTW infinite arity AND
ANY OF WIN AN FAIL MKAY BTW infinite arity OR
BTW Comparison:
BOTH SAEM "CAT" AN "DOG" BTW WIN if x == y
DIFFRINT 732 AN 184 BTW WIN if x != y
BOTH SAEM 12 AN BIGGR OF 12 AN 4 BTW x >= y
BOTH SAEM 43 AN SMALLR OF 43 AN 56 BTW x <= y
DIFFRINT 64 AN SMALLR OF 64 AN 2 BTW x > y
DIFFRINT 75 AN BIGGR OF 75 AN 643 BTW x < y
OBTW
==========================================================================
============================== FLOW CONTROL ==============================
==========================================================================
TLDR
BTW If/then statement:
I HAS A ANIMAL
GIMMEH ANIMAL
BOTH SAEM ANIMAL AN "CAT", O RLY?
YA RLY
VISIBLE "YOU HAV A CAT"
MEBBE BOTH SAEM ANIMAL AN "MAUS"
VISIBLE "NOM NOM NOM. I EATED IT."
NO WAI
VISIBLE "AHHH IS A WOOF WOOF"
OIC
BTW Case statement:
I HAS A COLOR
GIMMEH COLOR
COLOR, WTF?
OMG "R"
VISIBLE "RED FISH"
GTFO
OMG "Y"
VISIBLE "YELLOW FISH"
BTW Since there is no `GTFO` the next statements will also be tested
OMG "G"
OMG "B"
VISIBLE "FISH HAS A FLAVOR"
GTFO
OMGWTF
VISIBLE "FISH IS TRANSPARENT OHNO WAT"
OIC
BTW For loop:
I HAS A TEMPERATURE
GIMMEH TEMPERATURE
TEMPERATURE IS NOW A NUMBR
IM IN YR LOOP UPPIN YR ITERATOR TIL BOTH SAEM ITERATOR AN TEMPERATURE
VISIBLE ITERATOR
IM OUTTA YR LOOP
BTW While loop:
IM IN YR LOOP NERFIN YR ITERATOR WILE DIFFRINT ITERATOR AN -10
VISIBLE ITERATOR
IM OUTTA YR LOOP
OBTW
=========================================================================
================================ Strings ================================
=========================================================================
TLDR
BTW Linebreaks:
VISIBLE "FIRST LINE :) SECOND LINE"
BTW Tabs:
VISIBLE ":>SPACES ARE SUPERIOR"
BTW Bell (goes beep):
VISIBLE "NXT CUSTOMER PLS :o"
BTW Literal double quote:
VISIBLE "HE SAID :"I LIKE CAKE:""
BTW Literal colon:
VISIBLE "WHERE I LIVE:: CYBERSPACE"
OBTW
=========================================================================
=============================== FUNCTIONS ===============================
=========================================================================
TLDR
BTW Declaring a new function:
HOW IZ I SELECTMOVE YR MOVE BTW `MOVE` is an argument
BOTH SAEM MOVE AN "ROCK", O RLY?
YA RLY
VISIBLE "YOU HAV A ROCK"
NO WAI
VISIBLE "OH NO IS A SNIP-SNIP"
OIC
GTFO BTW This returns NOOB
IF U SAY SO
BTW Declaring a function and returning a value:
HOW IZ I IZYELLOW
FOUND YR "YELLOW"
IF U SAY SO
BTW Calling a function:
I IZ IZYELLOW MKAY
KTHXBYE
```
## Further reading:
- [LCI compiler](https://github.com/justinmeza/lci)
- [Official spec](https://github.com/justinmeza/lolcode-spec/blob/master/v1.2/lolcode-spec-v1.2.md)