PHL 1.0
| Paradigm(s) | procedural, imperative |
|---|---|
| Designed by | User:Fergusq |
| Appeared in | 2012 (designed), 2014 (published) |
| Memory system | variable-based |
| Dimensions | one-dimensional |
| Computational class | Unknown |
| Reference implementation | PHL-tulkki |
| File extension(s) | .phl |
Proceed High Language 1.0 (also known as PROCEED) is a mildly esoteric programming language created by User:Fergusq in 2012.
Syntax
There are three syntactical elements: procedure declaration, procedure or function call and a string constant. Everything that is not a declaration or a call is a constant. PHL 1.0 is based on substitution: a declaration is replaced with the name of the procedure and a call is replaced with the return value.
A basic declaration looks like this:
procedure[ call1; call2; call3; ... calln ]
A procedure can contain an infinite number of calls. No spaces are allowed between The name of the procedure and [. An anonymous function is like a basic declaration but without name.
A call is very similar to a declaration, except that [ and ] are replaced by ( and ).
procedure( arg1, arg2, arg3, ... argn )
Again, no spaces should occur between the name and the (.
Example:
printsum[
println(The sum of A and B:);
println(add(get(A), get(B)))
]
Built-in functions
| Function | Description |
|---|---|
| if(;s;f;f) | Calls the first procedure if the condition evaluates to true, otherwise the second. Condition is in format (val1)(op)(val2) where (val1) and (val2) are values and (op) is either ==, !=, <, >, <= or >=. Example: if(get(A)==get(B), [println(A is B!)], [println(A is not B)]) |
| get(;s) = ;o | Gets a variable. |
| set(;s;o) | Sets a variable. |
| add(;i;i) = ;i | Addition |
| sub(;i;i) = ;i | Subtraction |
| mul(;i;i) = ;i | Multiplication |
| div(;i;i) = ;i | Division |
| mod(;i;i) = ;i | Modulo |
| strCat(;s;s) = ;s | Concatenation |
| print(;s) | Prints a string. |
| println(;s) | Prints a line. |
| read() = ;s | Reads a character. |
| readln() = ;s | Reads a line. |
Commands included in the Javascript interpreter:
| Function | Description |
|---|---|
| alert(;s) | Creates a popup dialog. |
| prompt(;s) = ;s | Creates an input dialog. |
Examples
Hello World
main[
println(Hello World!)
]
Fibonacci sequence
main[
set(A, 0);
set(B, 1);
set(C, 0);
set(I, 0);
loop[
if(get(I)<10, [
set(C, add(get(A), get(B)));
set(A, get(B));
set(B, get(C));
set(I, add(get(I), 1));
println(get(I): get(C));
loop();
], []);
]();
]
Truth-machine
Uses prompt() as the input function ~ change to read() if using command line input.
main[
if(prompt()==0, [
println(0)
], [
loop[
println(1);
loop();
]()
])
]
Stack
As the main data structure of PHL 1.0 is a hash map, can it be used to simulate a stack (or a queue or everything else).
initStack[
set(stack, 0)
]
push[
set(stack, add(get(stack), 1));
set(strCat(stack_, get(stack)), get(value))
]
pop[
set(value, get(strCat(stack_, get(stack))));
set(stack, sub(get(stack), 1));
]
Example usage:
main[
initStack();
set(value, 1); push();
set(value, 2); push();
set(value, 3); push();
pop(); println(get(value));
pop(); println(get(value));
pop(); println(get(value));
]
Computational class
PHL 1.0 is believed to be Turing complete, but this has not been proved yet.
External resources
- Javascript PHL 1.0 Interpreter (from the Wayback Machine; retrieved on 22 February 2017)