summaryrefslogtreecommitdiffhomepage
path: root/ldpl.html.markdown
diff options
context:
space:
mode:
authorMartín del Río <11744462+Lartu@users.noreply.github.com>2019-09-08 22:21:12 -0300
committerGitHub <noreply@github.com>2019-09-08 22:21:12 -0300
commit8a4aeb0fd38d67d5780c11bc013bbbf32fe68f8c (patch)
tree6366896c748d959f90401976ee808ba418f13f88 /ldpl.html.markdown
parentffb9c5f909d860a98d3d86ed49bc169413e0dd65 (diff)
LDPL example documentation added.
Diffstat (limited to 'ldpl.html.markdown')
-rw-r--r--ldpl.html.markdown183
1 files changed, 183 insertions, 0 deletions
diff --git a/ldpl.html.markdown b/ldpl.html.markdown
new file mode 100644
index 00000000..cc95f5fb
--- /dev/null
+++ b/ldpl.html.markdown
@@ -0,0 +1,183 @@
+---
+language: LDPL
+filename: learnLDPL.ldpl
+contributors:
+ - ["Martín del Río", "https://github.com/lartu"]
+---
+
+**LDPL** is a powerful, C++ transpiled, open-source programming language designed
+from the ground up to be excessively expressive, readable, fast and easy to learn.
+It mimics plain English, in the likeness of older programming languages like COBOL,
+with the desire that it can be understood by anybody. It's very portable and runs on a
+plethora of different architectures and operating systems and it even supports UTF-8
+out of the box.
+
+[Read more here.](https://github.com/lartu/ldpl)
+
+```coffeescript
+# This is a single line comment in LDPL.
+# LDPL doesn't have multi-line comments.
+
+# LDPL is a case-insensitive language: dIsPlaY and DISPLAY are the same
+# statement, and foo and FOO name the same variable.
+
+# An LDPL source file is divided in two sections, the DATA section and
+# the PROCEDURE section.
+
+DATA:
+# Within the DATA section, variables are declared.
+
+myNumber is number # Defines a real number.
+myString is text # Defines a string.
+myList is number list # Defines a list of numbers.
+myMap is number map # Defines a map of numbers.
+
+# LDPL understands four data types: two scalar types (NUMBER, TEXT)
+# and two container types (LISTs and MAPs).
+# LISTs can be TEXT LISTs or NUMBER LISTs, while MAPs can be
+# TEXT MAPs and NUMBER MAPs. You can also chain many containers
+# to create larger data types:
+textListList is text list list
+myMulticontainer is number list list map
+# Defines a map of lists of lists of numbers.
+
+PROCEDURE:
+# Within the PROCEDURE section, your code is written.
+
+store -19.2 in myNumber # Use the STORE statement to assign values
+store "Hi there" in myString # to variables.
+push 890 to myList # Use PUSH - TO to append values to lists.
+push 100 to myList
+push 500 to myList
+store 45 in myMap:"someIndex" # Use the : operator to index containers.
+
+push list to textListList # Push an empty list into a list of lists.
+push "LDPL is nice!" to textListList:0 #Push text to the pushed list.
+
+display "Hello World!" # Use the DISPLAY statement to print values.
+# The display statement can receive multiple values separated by spaces.
+display crlf "How are you today?" myNumber myString crlf
+# CRLF is the standard line break value in LDPL.
+display textListList:0:0 " Isn't it?" crlf
+
+# IF statements in LDPL are extremely verbose:
+if myNumber is equal to -19.2 and myList:0 is less than 900 then
+ display "Yes!" crlf
+else if myMap:"someIndex" is not equal to 45 then
+ display "This is an else if!" crlf
+else
+ display "Else!" crlf
+end if
+# Valid LDPL comparisson operators are
+# - IS EQUAL TO
+# - IS NOT EQUAL TO
+# - IS LESS THAN
+# - IS GREATER THAN
+# - IS LESS THAN OR EQUAL TO
+# - IS GREATER THAN OR EQUAL TO
+if "Hi there!" is not equal to "Bye bye!" then
+ display "Yep, those weren't equal." crlf
+end if
+# LDPL normally doesn't understand inline expressions, so you
+# cannot do stuff like:
+# if myNumber - 9 * 2 is equal to 10 then
+# LDPL will set your computer on fire and burst your screen if you do so.
+
+# WHILE loops follow the same rules
+store 0 in myNumber
+while myNumber is less than 10 do
+ display "Loop number " myNumber "..." crlf
+ in myNumber solve myNumber + 1 # You can do math like this.
+repeat
+# You can use 'break' and 'continue' inside loops just like any other language.
+
+# LDPL also has FOR loops and FOR EACH loops
+for myNumber from 0 to 100 step 2 do
+ display myNumber crlf
+repeat
+
+for each myNumber in myList do
+ display myNumber
+repeat
+
+display "Enter your name: "
+accept myString # Use ACCEPT to let the user input values.
+display "Hi there, " myString crlf
+display "How old are you?: "
+accept myNumber
+if myNumber is greater than 200 then
+ display "Woah, you are so old!" crlf
+end if
+
+wait 1000 milliseconds # Pause the program for a whole second.
+
+# Let's do some math
+store 1.2 in myNumber
+in myNumber solve myNumber * (10 / 7.2) # Operators are separated by spaces.
+floor myNumber
+display myNumber crlf
+get random in myNumber # get a random number between 0 and 1
+ # and store it in myNumber
+
+# Functions in LDPL are called sub-procedures. Sub-procedures, like source
+# files, are divided in sections. The sections found in sub-procedures are
+# the PARAMETERS section, the LOCAL DATA section and the PROCEDURE section.
+# All sections except the PROCEDURE section can be skipped if they aren't
+# used. If no PARAMTERS nor LOCAL DATA sections are used, the PROCEDURE
+# keyword may be omited.
+sub myFunction
+ parameters:
+ a is number # LDPL is pass by reference
+ b is number
+ result is number # Thus you can return values through a parameter.
+ local data:
+ c is number
+ procedure:
+ get random in c
+ in result solve a + b * c
+end sub
+
+sub sayHello
+ display "Hi there!" crlf
+ return
+ display "This won't be displayed :("
+end sub
+
+call myFunction with 1 2 myNumber
+display myNumber crlf
+call sayHello
+call sayBye # sub-procedures may be called before they are declared
+
+sub sayBye
+ display "Bye!"
+end sub
+
+# One of the greatest features of LDPL is the ability to create your
+# own statements.
+
+create statement "say hi" executing sayHello
+say hi
+
+create statement "random add $ and $ in $" executing myFunction
+random add 1 and 2 in myNumber
+display myNumber crlf
+
+exit
+```
+
+## Topics Not Covered
+
+ * [Command line arguments](https://docs.ldpl-lang.org/variables-in-ldpl/command-line-arguments)
+ * [Error variables](https://docs.ldpl-lang.org/variables-in-ldpl/errorcode-and-errortext)
+ * [Import other files](https://docs.ldpl-lang.org/structure-of-ldpl-source-code/importing-other-sources)
+ * [Identifier naming schemes](https://docs.ldpl-lang.org/naming-rules)
+ * [Text Statements](https://docs.ldpl-lang.org/text-statements/join-and-in)
+ * [List Statements](https://docs.ldpl-lang.org/list-statements/push-to)
+ * [Map Statements](https://docs.ldpl-lang.org/vector-statements/clear)
+ * [File loading / writing](https://docs.ldpl-lang.org/i-o-statements/load-file-in)
+ * [Executing commands](https://docs.ldpl-lang.org/i-o-statements/execute)
+ * [Extending LDPL with C++](https://docs.ldpl-lang.org/extensions/c++-extensions)
+
+## Further Reading
+
+ * [LDPL Docs](https://docs.ldpl-lang.org)