Packlang
Packlang is an esolang by User:PythonshellDebugwindow.
Packages
Packages define a function and all variables it will need.
Variables
To define a variable of type Type with name varName:
Type varName;
To initialize it to its type's default value (normally the minimum possible value for that type):
INIT varName;
To increment its value by one:
INCR varName;
To decrement its value by one:
DECR varName;
Array indexing:
myArray(index)
Array length (exactly like this):
myArray(length)
Array myArray, index myIndex:
myArray(myIndex)
Package dependencies
This package has no dependencies:
Package { ... } myPackage;
This one has myDependency as a dependency:
Package : myDependency { ... } myPackage;
This one has dpA, dpB, and dpC as dependencies:
Package : dpA, dpB, dpC { ... } myPackage;
A package can have any number of dependencies. If a package has D as a dependency, then it will have access to all functions defined in D, none of which can use any external variables. Dependencies can have any number of functions and can have other dependencies as dependencies.
IO package
IO
is a useful built-in package. It provides two functions, charPut
and charGet
. charPut takes a variable or value as its argument and prints that as a character to STDOUT, while charGet takes a variable or pointer as its argument and sets that variable/pointer value to a character received from STDOUT. Empty input returns a newline.
Datatypes
- Integer
- Integer(min, max, underflowValue, overflowValue)
- String
- Char
- Array(type, length)
- Pointer(type)
Misc
% This is a comment until end-of-line %$ This is a multiline comment %
Examples
Hello, World!
Package : IO { Integer main { charPut(72); charPut(101); charPut(108); charPut(108); charPut(111); charPut(44); charPut(32); charPut(87); charPut(111); charPut(114); charPut(108); charPut(100); charPut(33); charPut(13); charPut(10); 0; } } helloWorld;
Truth-machine
Package : IO { Char input; Integer main { charGet(input); If input ^ 48 Then { While 1 Do { charPut(49); } } charPut(48); } } truthMachine;
Infinite cat program up to 100 chars each input
Package : IO { Array(Char, 100) input; Char c; Integer i; Integer j; Integer main { While 1 Do { INIT input; INIT c; INIT i; INIT j; charGet(c); While c ^ 10 Do { While c Do { INCR input(i); DECR c; } INCR i; charGet(c); } While j ^ i Do { charPut(input(j)); INCR j; } charPut(13); charPut(10); } 0; } } cat;
Interpret PlusOrMinus
Package : IO { String code; Integer i; Integer(0, 255, 255, 0) acc; Integer plusOrMinus : code { INIT i; INIT acc; While i ^ code(length) Do { If !(code(i) ^ 101011) Then { INCR acc; } If !(code(i) ^ 101101) Then { charPut(acc); DECR acc; } INCR i; } 0; } } plusOrMinus;
Define a dependency and use its functions
Dependency { Integer equals : Integer a, Integer b { !(a ^ b); } Integer nequals : Integer a, Integer b { !!(a ^ b); } } myDependency; Package : IO, myDependency { Integer main { % 48 (1100000) ^ 0 -> 48 '0', 48 ^ 1 -> 49 '1' charPut(110000 ^ equals(101, 011)); % 0 charPut(110000 ^ equals(001, 001)); % 1 charPut(110000 ^ nequals(101, 011)); % 1 charPut(110000 ^ nequals(001, 001)); % 0 0; } } myPackage;