- 1 Language overview
- 2 Variable types
- 3 Operator types
- 4 Control structure
- 5 User interaction
- 6 Inline commenting
- 7 Garbage collection
- 8 Trial and error execution
- 9 Function calls
- 10 Syntactical rules
- 11 Turing completeness
- 12 Implementation status
- 13 Example programs
- 14 External resources
thotpatrol is a thematic high level programming language designed with the intent of forcing the programmer to use bad practice if they hope to accomplish anything. The core eccentricity of thotpatrol is the specification that variables can only be named from a pre-approved list of variable names, and that this list of names cannot be programatically accessed. This constraint makes arrays impossible without a specialized library to programatically construct and dereference variable names in a trial and error method. The convention is that the list of allowable names is a list of female names which can be represented in Unicode. The language is meant to illustrate a dystopian world where the programmer is not only extremely isolated from the hardware, but the high level structure of the language imposes malignant and arbitrary constraints. Thus the programmer is locked in a high tower, and must despite this predicament make usable code through feats of human ingenuity and extremely bad practice.
In total, there are three types, all treated as primitives.
THOTTY (integer) THAUGHTY (String) THOT(boolean)
to set a variable name to a instance of a given type, type the following line of code:
💦DM💦 <type> <variablename>
Below is an example of a thaughty declaration
💦DM💦 THAUGHTY LAUREN
The following table shows the correct syntax for literals in each of the three types
|THOT||🉑,🈲 (true and false respectively)|
Variable assignment is defined as follows.
<varname> 🍑📧 <value>
the value may be a set of predicates or values connected by operators, as long as they resolve to a single value of the correct type.
The following binary operator types are presented in order of precedence.
|Operation||Operator Symbol||Argument Type||Return Type|
|==||INTERROGATE||two arguments of same type||THOT|
It's important to note that there is no grouping operator, so in order to group operations, results must be stored as values in predicate variables. Additionally, there are two unary operators, which each take higher precedence that all binary operators. The unary operators are presented in the following table.
|operation||symbol||Argument Type||Return Type|
Start and end lines
thotpatrol programs must have a code header line and closer line, which are respectively as follows
🇺🇸REPORT UNPATRIOTIC ACTIVITY🇺🇸
Any text before or after these lines will be ignored by the interpreter; it is standard practice to place a comment header above the code header line.
thotpatrol supports two internal control sequencing structures, similar to the 'if' and 'while' structures found in other high level languages. The syntax is as follows.
😎BRIEF😎 <THOT value> <if statement contents> 🔇DEBRIEF🔇
❤PRIME ASSETS❤ <THOT value> <loop contents> 🎧INTERCEPT MALIGNANT COMMUNICATIONS🎧
thotpatrol supports user input and output through the console.
🕵 🍑📧 <varname>
will output the contents of a variable of any type
🕵 📧🍆 <THAUGHTY name>
will cause the interpreter to wait until user input is entered and read it in as a THAUGHTY value.
Any text after the '🔥' symbol on a line will be ignored by the interpreter. This enables inline commenting.
The following code undeclares a variable, destroying the value that variable holds and allowing re-declaration to any type. This is very important for functions in libraries to prevent overlapping declaration.
NAUGHTY <vartype> <varname>
Trial and error execution
🤷 <some code>
The above causes the interpreter to skip the remainder of line if it cannot be parsed or causes illegal operation. Programmatic trial-and error-array declaration would not be possible without this.
The following code is used to call a function located in another file in the specified relative directory.
👐 <relative address>
Note that variable declarations and values are retained in nested function calls, and that once the calle function terminates, it will return control to the caller function. programs can call themselves recursively, but this cause problems if there are repeated declarations of the same variable without garbage collection, as an already declared variable cannot be re-declared. It is generally recommended to use a helper function with no declarations for the actual recursive part of a program's operation.
Each newline-separated line is interpreted as an instruction. Newlines in string literals are not counted as structural newlines, and are allowed. Multiple instructions cannot be placed on the same line. thotpatrol files must be saved in UNICODE.
With a list of allowable variable names equal to the sample space generated by the possible combinations of characters in a variable name, thotpatrol is turing complete in the same sense as another high level language on a finite machine, as 'indexing' is fairly trivial. However, with the mandated restrictions on variable naming, the only hope of limited simulation a proper finite tape is through trial and error variable name generation, which is extremely costly.
Implemented in Java; see External resources.
The following is an implementation of fizzbuzz in thotpatrol
Mindy Galveston 2/11/annodomini2017 A simple fizzbuzz program "Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”." 📡JACKING IN📡 💦DM💦 THOTTY CHRISTINE 🔥var declarations 💦DM💦 THOT ALEXIS 💦DM💦 THOT ANNA CHRISTINE 🍑📧 ™1™ 🔥 counter initialization ❤PRIME ASSETS❤ CHRISTINE 🤛 ™100™ ALEXIS 🍑📧 CHRISTINE 😂 ™3™ INTERROGATE ™0™ 🔥 case logic component assignment ANNA 🍑📧 CHRISTINE 😂 ™5™ INTERROGATE ™0™ 😎BRIEF😎 ALEXIS CONSPIRATOR ANNA 🔥 case logic for fizzbuzz 🕵 🍑📧 ©FizzBuzz © 🕵 🍑📧 CHRISTINE 🕵 🍑📧 © © 🔇DEBRIEF🔇 😎BRIEF😎 ALEXIS CONSPIRATOR 🙃ANNA 🕵 🍑📧 ©Fizz © 🕵 🍑📧 CHRISTINE 🕵 🍑📧 © © 🔇DEBRIEF🔇 😎BRIEF😎 🙃ALEXIS CONSPIRATOR ANNA 🕵 🍑📧 ©Buzz © 🕵 🍑📧 CHRISTINE 🕵 🍑📧 © © 🔇DEBRIEF🔇 😎BRIEF😎 🙃ALEXIS CONSPIRATOR 🙃ANNA 🕵 🍑📧 CHRISTINE 🕵 🍑📧 © © 🔇DEBRIEF🔇 CHRISTINE 🍑📧 CHRISTINE 👏 ™1™ 🔥 counter incrementation 🎧INTERCEPT MALIGNANT COMMUNICATIONS🎧 NAUGHTY THOTTY CHRISTINE NAUGHTY THOT ALEXIS NAUGHTY THOT ANNA 🇺🇸REPORT UNPATRIOTIC ACTIVITY🇺🇸
Recursive iteration example
For this example, assume that the main and utility methods are stored in text files titled main.txt and call.txt respectively.
📡JACKING IN📡 💦DM💦 THOTTY KAREN KAREN 🍑📧 ™123™ 👐 call.txt NAUGHTY THOTTY KAREN 🇺🇸REPORT UNPATRIOTIC ACTIVITY🇺🇸
📡JACKING IN📡 🕵 🍑📧 KAREN 🕵 🍑📧 © © KAREN 🍑📧 KAREN 👻 ™1™ 😎BRIEF😎 KAREN 👉 ™0™ 👐 call.txt 🔇DEBRIEF🔇 🇺🇸REPORT UNPATRIOTIC ACTIVITY🇺🇸
Dereferencing and Variable Handling Example
Mindy Galveston 2/22/anno domini 2017 "A program to extensively test variable handling. Will print 42069 upon correct execution." 📡JACKING IN📡 💦DM💦 THAUGHTY GWEN GWEN 🍑📧 ©KATY© 💦DM💦 THOTTY 👁🗨GWEN👁🗨 👁🗨GWEN👁🗨 🍑📧 ™420™ 🕵 🍑📧 👁🗨GWEN👁🗨 NAUGHTY THOTTY 👁🗨GWEN👁🗨 NAUGHTY THAUGHTY GWEN 💦DM💦 THAUGHTY GWEN 💦DM💦 THAUGHTY KATY 💦DM💦 THAUGHTY ALEXIS GWEN 🍑📧 ©KA© KATY 🍑📧 ©REN© ALEXIS 🍑📧 GWEN REDACTED KATY 💦DM💦 THOT 👁🗨ALEXIS👁🗨 👁🗨ALEXIS👁🗨 🍑📧 🉑 😎BRIEF😎 👁🗨ALEXIS👁🗨 🕵 🍑📧 ©69© 🔇DEBRIEF🔇 NAUGHTY THOT 👁🗨ALEXIS👁🗨 NAUGHTY THAUGHTY ALEXIS NAUGHTY THAUGHTY GWEN NAUGHTY THAUGHTY KATY 🇺🇸REPORT UNPATRIOTIC ACTIVITY🇺🇸