Baulk

From Esolang
Jump to navigation Jump to search

Baulk was an attempt to by User:yayimhere create a functionally pure esolang, that does not place its basis within Lambda calculus. it came out to be a sort of string rewriting language, however the string rewriting is a lot more complex than simply rewriting.

Full description

Basic operation application

most Baulk operators follow the structure op[inp](or op[inp1][inp2]... ect, if you want multiple inputs), though this, however rare, is sometimes broken. inp is allowed to be empty, or anything else

Evaluation

Baulk evaluates quite normally compared to other languages, however specifics are provided:

  • all expressions that can be evaluated without affecting things that would not be evaluated.
  • everything that cannot be evaluated(this includes "invalid" code), is not evaluated. this includes operators with inadequate inputs, or non code text.
  • Every program is looped over until nothing can be evaluated further
  • if a would-be operators input is being used by another operator, is does a › until an input is found

Operators

this is more so a rewriting table than a description, but some commands do have descriptions. e is the empty string and is the expression(so either the rest of the program, or something within brackets) to the left or the right of the command.

Op+in result description
*[x] *[x x] OR e chooses the second option if x is empty.
`[x] `[x] stops x from being evaluated until the eval function is used on it.
'[x] x eval x
¯[x] … x[…] *
^[x] x[^] *
;[x] x identity
.[x] … x .[…] *
º[x] x x copy
+[x][y][z] [x]z[y] *
·x y [x][y] give each individual object brackets
~[x] … …[x] *
-… e removal of an expression
(x) brackets/separators
x› y z x z y x takes the n+1'th input, where n is the number of ›'s, instead of the first on given(n+1 because a single › would be n=1, which is the first input given)
…‹z replace all instances of the n'th non command char within … with the char z, where n is the number of ‹'s
(space) e spaces are interpreted as non existent within the program(for example x[y] and x [y] are the same)
{…} grouper. forces symbols within to always be next to each other. this does not change such things as application or execution order

Examples

Infinite Loop:

{y^}[{x^}]