We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.

Polynomix

From Esolang
Jump to navigation Jump to search

Versions:   1 - 2 - 3 - 4   |   6   |   8

This is still a work in progress. It may be changed in the future.
This is not an esolang!
Only User:I am islptng can modify this page's content (others can still fix errors). If you want to make suggestions, go to the talk page.
Polynomix
Designed by User:I am islptng
Appeared in 2026
Computational class Turing-complete
Reference implementation Unimplemented
Influenced by APL
Haskell
Python
File extension(s) .plx

Polynomix is a powerful computer language designed by User:I am islptng.
It combines polynomials as first-class citizens with APL's array-oriented programming paradigm, Haskell's functional programming paradigm, and Python's dynamic typing.

I briefly renamed to Polymorphix for accuracy, but I reverted. Turns out, being unique beats being correct. Polynomix is the one and only -- polynomials or not.

Data types & TypeString

TypeString is a string that represents the type of a value. It is used to annotate the type of a value in the source code. a TypeString always begin and end with $.
In Polynomix, there are 7 data types:

  • Nil is represented by ;
  • Boolean is represented by =
  • Character is represented by "
  • Type is represented by /
  • Fraction is represented by +
  • Pair is represented by , or l,r if typed
  • List is represented by [] or [type] if typed
  • Lambda is represented by >

Note that you can use () to group expressions in a TypeString.
Specially, Wildcard is represented by * or type1|type2|type3|... (| have a lower precedence than ,).

Syntax

Details is available at Polynomix/Symbols.

Operators (as functions)

Operators are functions that operate on one or more operands. They are defined in the language and can be used in expressions.
In Polynomix, expressions evaluate strictly from left to right, so a+b*c is equivalent to (a+b)*c instead of a+(b*c).

By adding a !, you can make any non-operator thing into a verb(operator), and any operator to a noun.

  • Monadic: x f! for f(x)
  • Dyadic: a f! w for a.f(w)
  • Tryadic+: x f!(a b c d ...) for x.f(a,b,c,d)

Adding a # before the operator means assignment, for example: a #+ 1 for a+=1.