Uiua: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 32: Line 32:
=== Function ===
=== Function ===
In the web version of Uiua, we can type in the name of the function or a part of it and when run, the interpreter will format the name to Unicode Symbol, so that we don't need use of non-ASCII keyboards.
In the web version of Uiua, we can type in the name of the function or a part of it and when run, the interpreter will format the name to Unicode Symbol, so that we don't need use of non-ASCII keyboards.
All table below are base on the [[Uiua]] 0.8.0 Version.
==== Stack ====
==== Stack ====
Work with the stack
Work with the stack
Line 124: Line 125:
| <code>↧</code> || [[Minimum]]/[[Logical And]] || Take the minimum of two arrays (Can use for logical AND.) || min
| <code>↧</code> || [[Minimum]]/[[Logical And]] || Take the minimum of two arrays (Can use for logical AND.) || min
|-
|-
| <code>↥</code> || [[Maximum]]/[Logical Or]] || Take the maximum of two arrays (Can use for logical OR.) || max
| <code>↥</code> || [[Maximum]]/[[Logical Or]] || Take the maximum of two arrays (Can use for logical OR.) || max
|-
|-
| <code>∠</code> || [[Atangent]] || Take the arctangent of two numbers || atan
| <code>∠</code> || [[Atangent]] || Take the arctangent of two numbers || atan
|-
|-
| <code>ℂ</code> || [[Complex]] || Make a complex number.The first argument is the imaginary part, and the second argument is the real part || com
| <code>ℂ</code> || [[Complex]] || Make a complex number.The first argument is the imaginary part, and the second argument is the real part || com
|}
====  Monadic Array ====
Operate on a single array
{| class="wikitable" style="margin:auto"
|+ Table of Monadic Array in Uiua
! Glyph !! Name !! Definition
|-
| <code>⧻</code> || [[Length]] || Get the number of rows in an array
|-
| <code>△</code> || [[Shape]] || Get the dimensions of an array
|-
| <code>⇡</code> || [[Range]] || Make an array of all natural numbers less than a number
|-
| <code>⊢</code> || [[First]] || Get the first row of an array
|-
| <code>⇌</code> || [[Reverse]] || Reverse the rows of an array
|-
| <code>♭</code> || [[Deshape]] || Make an array 1-dimensional
|-
| <code>¤</code> || [[Fix]] || Add a length-1 axis to an array
|-
| <code>⋯</code> || [[Bits]] || Encode an array as bits (LSB-first)
|-
| <code>⍉</code> || [[Transpose]] || Rotate the shape of an array
|-
| <code>⍏</code> || [[Rise]] || Get the indices into an array if it were sorted ascending
|-
| <code>⍖</code> || [[Fall]] || Get the indices into an array if it were sorted descending
|-
| <code>⊚</code> || [[Where]] || Get indices where array values are not equal to zero
|-
| <code>⊛</code> || [[Classify]] || Assign a unique index to each unique element in an array
|-
| <code>◴</code> || [[Deduplicate]] || Remove duplicate elements from an array
|-
| <code>◰</code> || [[Unique]] || Get a mask of first occurrences of items in an array
|-
| <code>□</code> || [[Box]] || Turn an array into a box. The box function is complicated, so you can look at [https://www.uiua.org/docs/box] for more information
|-
|}
|}



Revision as of 10:35, 27 January 2024


Uiua is a stack-based array language designed by Kai Schmidt using glyphs inspired mainly by BQN.

Overview

Uiua uses concatenative evaluation (a context-free grammar) with a right-to-left ordering as in Polish notation. The language supports tacit programming using stack manipulation primitives, and all complex functions must be defined this way as there is no explicit function form that allows local variables. Functions have a fixed number of input and output values, meaning the overloading of ambivalent functions is removed. Because of this, Uiua often splits APL primitives into two functions. Its primitives use Unicode glyphs including many not found in other languages. To avoid the need for a keyboard layout containing these, each primitive can also be spelled using a name that consists of lowercase letters (user-defined names must have at least one uppercase letter). By default, the language formats source files when run to convert these names into the corresponding glyphs.

Like the SHARP APL family, arrays are flat with a homogeneous type; however, functions in Uiua are first-class values, and instead of boxes, niladic constant-valued functions are used to provide array nesting.

Uiua was featured on Array Cast in 2023.

Primitives

Function

In the web version of Uiua, we can type in the name of the function or a part of it and when run, the interpreter will format the name to Unicode Symbol, so that we don't need use of non-ASCII keyboards. All table below are base on the Uiua 0.8.0 Version.

Stack

Work with the stack

Table of Stack function in Uiua
Glyph Name Type Definition
. Duplicate Monadic 2-output function Duplicate the top value on the stack
, Over Dyadic 3-output function Duplicate the second-to-top value to the top of the stack
: Flip Dyadic 2-output function Swap the top two values on the stack
◌(;) Pop Monadic 0-output function Discard the top stack value
? Stack Noadic 0-output function Debug print all stack values without popping them
Trace Monadic function Debug print the top value on the stack without popping it

Constants

Push a constant value onto the stack

Table of Constants in Uiua
Glyph Name Definition
η Eta The number of radians in a quarter circle
π Pi The ratio of a circle's circumference to its diameter
τ Tau The ratio of a circle's circumference to its radius
Infinity The biggest number

Monadic Pervasive

Operate on every element in an array

Table of Monadic Pervasive in Uiua
Glyph Name Definition
¬ Not Logical not
± Sign Numerical sign (1, ¯1, or 0)
¯ Negate Negate a number
Absolute value Get the absolute value of a number
Sqrt Take the square root of a number
Sine Get the sine of a number
Floor Round to the nearest integer towards ¯∞
Ceiling Round to the nearest integer towards
Round Round to the nearest integer

Dyadic Pervasive

Operate on every pair of elements in two arrays (Note that True is 1 and False is 0)

Table of Monadic Pervasive in Uiua
Glyph Name Definition Formats from:
= Equals Compare for equality =
Not equals Compare for inequality !=
< Less than Compare for less than <
> Greater than Compare for greater than >
Less or equal Compare for less than or equal <=
Greater or equal Compare for greater than or equal >=
+ Add Add values +
- Subtract Subtract values -
× Multiply Multiply values *
÷ Divide Divide values %
Modulus Modulo values mod
Power Raise a value to a power pow
Logarithm Get the based logarithm of a number log
Minimum/Logical And Take the minimum of two arrays (Can use for logical AND.) min
Maximum/Logical Or Take the maximum of two arrays (Can use for logical OR.) max
Atangent Take the arctangent of two numbers atan
Complex Make a complex number.The first argument is the imaginary part, and the second argument is the real part com

Monadic Array

Operate on a single array

Table of Monadic Array in Uiua
Glyph Name Definition
Length Get the number of rows in an array
Shape Get the dimensions of an array
Range Make an array of all natural numbers less than a number
First Get the first row of an array
Reverse Reverse the rows of an array
Deshape Make an array 1-dimensional
¤ Fix Add a length-1 axis to an array
Bits Encode an array as bits (LSB-first)
Transpose Rotate the shape of an array
Rise Get the indices into an array if it were sorted ascending
Fall Get the indices into an array if it were sorted descending
Where Get indices where array values are not equal to zero
Classify Assign a unique index to each unique element in an array
Deduplicate Remove duplicate elements from an array
Unique Get a mask of first occurrences of items in an array
Box Turn an array into a box. The box function is complicated, so you can look at [1] for more information

External links

  • Uiua on the concatenative language wiki


APL dialects [edit]
Maintained APL+WinAPL2APL64APL\ivApletteAprilCo-dfnsDyalog APLDyalog APL Visiondzaima/APLGNU APLKapNARS2000PometoTinyAPL
Historical A Programming LanguageA+ (A) ∙ APL#APL2CAPL\360APL/700APL\1130APL\3000APL.68000APL*PLUSAPL.jlAPL.SVAPLXExtended Dyalog APLIverson notationIVSYS/7090NARSngn/aplopenAPLOperators and FunctionsPATRowanSAXSHARP APLRationalized APLVisualAPL (APLNext) ∙ VS APLYork APL
Derivatives AHPLBQNCoSyELIGleeIIvyJJellyK (Goal, Klong, Q) ∙ KamilaLispLang5LilNialRADUiua
Overviews Comparison of APL dialectsTimeline of array languagesTimeline of influential array languagesFamily tree of array languages