ΙΧΘΥΣ

From Esolang
Jump to navigation Jump to search

ΙΧΘΥΣ (or "ixqus") means 'fish' in Classical Greek. It is an esoteric programming language created by User:Salpynx, as a thematic and computationally more powerful derivative of Deadfish x, and is therefore a superset of the original Deadfish language.

Commands

Like Deadfish it has a single accumulator, x. Like Deadfish x it has four extra commands which adds the ability to define statements.

letter term action CAPITAL CAPITAL action
ι ἵστημι (raise / set up) x+1 Ι Begin statement def
χ χάζω (draw back) x-1 Χ Set x to 0
θ θʹ (9) a square number x*x Θ End statement def (Θέτε! / Make!)
υ ὑπάγω (bring forth) display x Υ display x as Unicode character
ς σύμβολον (symbol/token) Σ

Strengths

  • Unicode output
  • Significantly increased computational power over its Deadfish parents, able to implement 99 bottles, truth-machine, other language interpreters etc whilst remaining very Deadfish-like
  • Achieves Turing completeness via minimal modifications to Deadfish
  • Using Deadfish arithmetic overflow side effects to become a Turing tarpit adheres to the spirit of Deadfish
  • Statement definition appending is a novel mechanism(?)
  • Self-modifying ability allows code to redefine itself as an interpreter for other esolangs, despite being output only
  • Trivial to use as Deadfish, challenging to program more complex functions
  • Ancient Greek theme, while otherwise being a distraction, is self-consistent and ties the fish theme to the operations via another (non-anglo, non-latin, "dead") language

Details, and modifications from Deadfish / x

  • Reinstates the original Deadfish 'overflow' arithmetic behaviour (reset to 0 iff accumulator equals -1 OR 256). It is a feature, not a bug. Essential to allow values over 256 and enable the Unicode output required by ΙΧΘΥΣ.
  • Output is Unicode, not ASCII.
  • Does not refer to the definable 'functions' (The X command in Deadfish x, Ι in ΙΧΘΥΣ) as 'functions' since they take no arguments, return no results, and can only produce side-effects. In ΙΧΘΥΣ they are called 'statements', and have a number of important features, listed below.
  • Adds a dedicated symbol (sigma) for labelling new statements.
  • Statements are a collection of one or more statement symbols associated with a symbol, ς.
  • There is no execute command (Deadfish x C) required to trigger a defined statement, ΙΧΘΥΣ simply interprets the symbol if it can find a definition.
  • Statement definitions can be nested.
  • Statements definitions can be recursive.
  • Statement symbols can be read before they are defined (or after they have been removed). There is no error on unrecognised symbols, simply a NOOP.
  • Applying subsequent statement definitions (Ι) to an existing symbol appends to the statement definition, not overwrites.
  • A statement definition is removed from storage if the Deadfish 'overflow' condition is triggered while reading from its definition. Only the symbol definition is removed, copies currently being read can continue execution.
  • Built-in command definitions are not appendable or removable, but they can be overwritten with new statement definitions that use the original command symbol.

Examples

Hello Worlds

"Hello, World!"

   ιιιθχθιιιιιιιιΥΧιιιθιθιΥιιιιιιιΥΥιιιΥΧιιιθχχθχχχχχΥΧιιθιιθχχχχΥΧιιιθθιιιιιιΥΧιιιθιιθχχχχχχχχχχΥιιιΥχχχχχχΥΧιιιθιθΥΧιιθιιθχχχΥ

OUTPUT: Hello, World!

A more representative example for ΙΧΘΥΣ is to print 'Hello World' in Classical Greek:

   ΙΣΧιιιιιθιιιιιιθΘΙϛχχχχχχχΘΙσϛϛιΘΙϲιιιιιιιιΘΣσσΥϲιιΥϲΥϲΥισΥΧιιθιιθϲΥσιΥΣσσσΥϲϲϲϲϲχχχΥιιιιΥϛΥϛΥΧιιιιιθϲΥ

OUTPUT: Χαιρε, Κοσμε!

Alphabet

ΙΧΘΥΣ is not just limited to Greek, but can output from any Unicode block, for example, the Phoenician alphabet:

   ΧΙΣιΥΘΙσχχχχχχχχχχχχχχχχχχχχχχχχχχχχΘιιιθιιιιιιιιθσθχχσσσσσσσσσσΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣ

OUTPUT: 𐤀𐤁𐤂𐤃𐤄𐤅𐤆𐤇𐤈𐤉𐤊𐤋𐤌𐤍𐤎𐤏𐤐𐤑𐤒𐤓𐤔𐤕

Deadfish interpreter

Since ΙΧΘΥΣ is a superset of Deadfish, it is trivial to create a compliant Deadfish interpreter, e.g. for standard "idso" version:

   ΙiιΘΙdχΘΙsθΘΙoυΘΧ

Square number calculation (finite loop)

 # Print out all square numbers under 256, and tidy up
 ΧΙσιιιΘΙςΙσιιΘΘιιιιθχχΙρχρσχχςυΘρΙςΧχΘΙσΧχΘςσΧ

Truth-machine

# Truth-machine. Performs the check on the current accumulator value.
ι
# above line increments accumulator to 1, delete above line for 0
Ις ΣχΧΘ
ΙσΧιιθιιιθχΘ  ς
ΙΣΧιιθιιιθΥΣΘ ς σΥ

99 Bottles

ΙͼΧιιιθιΘ
ΙσͼθχχΥιιιιιιιιιιιιιΥιιιιιΥΥχχχχχχχχΥχχχχχχχΥιιιιιιιιιιιιιιΥΧιιιιιιθχχχχΥ
ͼιθχχχχχχχχχχΥχχχχχχχχχΥΧιιιιιιθχχχχΥͼθχχΥιιιΥΥιιιιιιιιιιιιιΥΧΘ
ΙϹΧιιιιιιθχχχχΥͼιθχχχχχχχχχχΥχΥΧιιιιιιθχχχχΥͼιθχχχχχΥχχχχχχχχχχχχΥχχχΥΧιιιιιιθχχχχΥͼιθχχΥͼθχχχΥιιιιιιιιιιιΥΥΧΘ
ΙςͼχθιιιΥͼθχχχΥͼθιιιιιιιΥχχχχχχΥΧιιιιιιθχχχχΥΧιιιθιιθχχχχχχχχχχΥχΥχχχχχχχχχΥΧιιιιιι
θχχχχΥΧιιιθιθΥΧιιιθιιθχχχχχχχχχχΥιιιιιιιιΥχχχχχχχχχΥΧιιιθχχθχχχχχΥΧιιιιιιθχχχχΥΧιιιθι
ιθχχχχχχχχχΥΧιιιθιθχχχΥΧιιιθιιθχχχχχχΥΥΧιιιιιιθχχχχΥΧιιιθιθιιιιιΥΧιιιθιιθχχχχχΥΧιιιιι
ιθχχχχΥΧιιιθιθχχχΥΧιιιθιιθχχχχχχχΥχχχΥιιιιιιΥχχχχχχχΥͼθΥΧΘ
ΙΣΧιιιθιθχ𝞻Θ
Ι𝞼χιιΘ
ΙϲιιιθχχθχχχχχΥͼΥΘ
Ι𝝇ιιιθχχθχχχχχιιΥͼΥΘ
Ι∑ΣυσϹϲΣυσ𝝇ςϲ
Σχχ𝞼𝞼χυσϹ𝝇ͼΥΙ𝞻χΘ∑Θ
∑𝞻

Theme

ΙΧΘΥΣ was in part designed by following a classical Greek theme of "physical scribal computing" using the following parts:

  • A counting board (abacus) and pebbles to track the tally. (accumulator: x)
  • A large pithos (storage jar) to store inscribed ostraka (clay fragments)
  • A stack of papyrus sheets to track current symbols (primary storage)
  • A line in the sand creating two rows, (2 register stacks)
    • one above for a list of ostraka currently being read
    • the other below for a list of ostraka currently being written
  • A magic fish that can manifest Unicode specification characters

Source Format

To program in ΙΧΘΥΣ you will need the ability to input Greek characters. Installing a Greek Polytonic keyboard for your operating system is required. Or you could copy and paste from the table above. There is currently no Esolang:Categorization#Source_format for text-based, but non-Latin source other than Category:CJK. ΙΧΘΥΣ is deliberately occupying this space.

Computational Class

The author believes ΙΧΘΥΣ is Turing complete as it is possible to transpile the Waterfall Model code into it. See the external example below.

There also exists a partially completed Cyclic tag system written in the language. The example currently lacks an automated loop, or printed output. The former should be relatively easy to implement now that the basic tag manipulation is complete, and the latter (output) should not affect the computational class. Although possible, providing an output stage would increase the size and complexity of the code considerably.

The features of this language that give rise to Turing completeness are: the ability to execute recursive functions (infinite loops), which can be broken out of by causing the Deadfish "overflow" to occur, which removes the definition of the recursive function. Other tricks that help writing complex programs:

  • Using Deadfish "overflow" to test conditions by breaking one of multiple statement definitions.
  • Using statement definitions as variables which can return the accumulator to a fixed value.
  • Temporarily re-defining built-in statements to perform different actions a set number of times.

Implementing arbitrary interpreters for more obviously Turing complete languages in ΙΧΘΥΣ would be substantially harder than implementing an ΙΧΘΥΣ interpreter in something like brainf**k, which must say something about the complexity and usefulness of this language.

The fact that the only conditional control flow operations arise indirectly from the effects of the Deadfish arithmetic "overflow" feature (reset accumulator to 0 when accumulator = -1 or 256) is what makes ΙΧΘΥΣ interesting*.

*(YMMV)

External resources