PAL
PAL is an esolang created by islptng.
Programs consist of a single expression containing nested function calls, lambdas and literals (numbers and lists), written using Polish (prefix) notation. Each function has a predefined number of arguments, making the notation unambiguous. This language is tacit.
No description about commands in this esolang should be provided (examples are welcome here).
- This is still a work in progress. It may be changed in the future.
Data types
There are 3 data types.
- Number, which stores a fraction.
- List, which stores a list of objects.
- Lambda, which is a monadic lambda function
Syntax
In this esolang, a program is a single expression. They're written in Polish(Prefix) notation.
Like @ and XENBLN, expressions are made of trees of function calls. Each character represents a function that takes a predefined amount of arguments, which follow directly after it in the code. For example, if command A takes 1 argument, B takes 2, C takes 3, and D and E both take none, then this code
CBADCDBEDEDAE
would be written in many languages like
C(B(A(D()),C(D(),B(E(),D()),E()))),D(),A(E()))
There are exceptions. To define a list, you use []
; To define a lambda, you use {}
.
There are some special cases in the console.
A line that begins with ]
defines macros.
To separate 2 integers, use a space. Otherwise, you won't need any separators.
True is 1, and False is -1 (unlike most languages, which is 0; In this language, however, 0 is truthy).
Output list structures
It's a bit strange. Let's say you want to evaluate the Loshu:
[[4 9 2][3 5 7][8 1 6]]
> v v v 4 3 8 9 5 1 2 7 6
A >
means a list that was displayed horizontally, and a v
means a list that was displayed vertically.
Horizontal and vertical takes turn to appear.
Therefore, if you want to display your matrix correctly, you need to either transpose it (recommended):
t[[4 9 2][3 5 7][8 1 6]]
> v v v 4 9 2 3 5 7 8 1 6
Or enclose it:
[[[4 9 2][3 5 7][8 1 6]]]
> v > 4 9 2 > 3 5 7 > 8 1 6
A more nested example:
[3 7[4 6[2 5 7 4 1]8]5 9 2]
> 3 7 v 5 9 2 4 6 > 2 5 7 4 1 8
Strings
In this esolang, there are no clear type of strings.
However, strings are representated by a depth-3 array of ASCII values. For example,
[[[72 105 33 10]]]
is actually equivalent to "Hi!\n"
.
Formatting exist:
[[[72 105 33 10[+1 2]10]]]
Equivalent to python f"Hi!\n{1+2}\n"
.
Implementation
Examples
Hello World
[[[72 101 108 108 111 44 32 119 111 114 108 100 33 10]]]
XKCD Random Number and Quine
4
Since the whole program is an expression, a single number evaluates to itself, and finally it's printed.
A+B problem
+
Follow it by the 2 numbers you want to input.
Factorial
f{i1\*r1+1x1} 10
Output: 3628800
(10! = 3628800)
FizzBuzz
[~{?=0%x5?=0%x3[[[70 105 122 122 66 117 122 122]]][[[66 117 122 122]]]?=0%x3[[[70 105 122 122]]]x}r1 101 1]
Since this language is not able to print (only evaluation), the result will be a list.