Nial (Nested Interactive Array Language) ist eine funktionale Array-Programmiersprache, die von Mike Jenkins und Trenchard More ab 1979 an der Queen's University at Kingston zusammen mit dem IBM Cambridge Scientific Center entwickelt wurde. Nial macht verschachtelte Arrays (nested arrays) zum zentralen Datentyp: Anders als klassische Array-Sprachen wie APL erlaubt Nial Arrays, deren Elemente selbst wieder Arrays verschiedener Form sein können.

Grundkonzepte

  • Atome: Zahlen, Zeichen und Wahrheitswerte (Atom = Array der Tiefe 0)
  • Arrays: rechteckige (rectilinear) Sammlungen von Atomen oder Arrays, z. B. 1 2 3 oder [1 2 3; 4 5 6]
  • Operatoren: werden per first, rest, link etc. direkt auf Arrays angewendet
  • Transformers: höherstufige Operatoren wie EACH, REDUCE, FORK oder ITERATE kombinieren und steuern Operationen

Wichtige Befehle

first 1 2 3        # 1 (erstes Element)
rest 1 2 3         # 2 3 (Rest ohne erstes Element)
last 1 2 3         # 3
link 1 2 3 4 5     # verkettet Arrays zu einem
count 1 2 3        # 3 (Anzahl der Elemente)
pick [2; 1 2 3]    # gezielter Zugriff auf ein Element
drop 2 1 2 3       # 3 (ohne die ersten zwei Elemente)
find 2 1 2 3       # 2 (Position des Elements)

Weitere häufige Operatoren sind front, cull, cut, grid, mix, laminate, cart, pack, gradeup, random sowie die mathematischen plus, minus, product, quotient, power, mod, max, min, abs, ceiling und floor. Prädikate wie atomic, depth, empty, equal, in, match, isinteger und ischar prüfen Eigenschaften von Werten.

Q'Nial

Die portable Implementierung Q'Nial (Jenkins, Software – Practice and Experience 1989) läuft auf Unix, Windows und macOS und bringt eine interaktive Umgebung mit. Nial war einflussreich für die Forschung an verschachtelten Array-Modellen und wird bis heute gepflegt (aktuelle Versionen unter nial-array-language.org).

Verwandte Grundlagen: APL-Befehle, J-Befehle, Ivy-Befehle, BQN-Befehle.