Holatri stellt das Holon bereit: ein einzelnes Key/Value-Paar, das als Skalar, Liste oder benannte Menge auftritt.
Holons enthalten Holons — zusammen bilden sie eine Holarchie. Fähigkeiten wie Formeln, Suche oder Vernetzung kommen über ein schlankes Capability-System hinzu.
Der Typ eines Holons ergibt sich aus seinem Wert: ein Hash wird zum TRIBE, ein Array zum CROWD, alles Übrige zum SINGLE. Verschachtelte Strukturen werden rekursiv zu Holons.
require "holatri"
# TRIBE — jeder Hash-Eintrag wird zu einem Holon
person = Holatri::Holon.new(:person, {
name: "Ada",
skills: %w[ruby math], # => CROWD
pet: { kind: "cat", legs: 4 } # => TRIBE (rekursiv)
})
person.tribe? # => true
person[:name].value # => "Ada"
person.pet.legs.value # => 4 (Zugriff über Namen)
person[:pet][:legs].value # => 4 (Zugriff über den Schlüssel)
person.to_h
# => { person: { name: "Ada", skills: ["ruby", "math"],
# pet: { kind: "cat", legs: 4 } } }
Sieben mitgelieferte Capabilities. Fünf sind ab Werk aktiv, drei werden gezielt zugewiesen. Eigene lassen sich in wenigen Zeilen ergänzen.
Beliebige Tags (Symbols) an einem Holon — gesetzt, geprüft, entfernt.
StandardWahrnehmungs-Zustand blurred ↔ shaped, mit Propagation an Subholons.
StandardZugriff auf Kind-Holons über ihren Namen, mit Auflösung nach oben.
StandardKompakte, lesbare Darstellung mit den Indikatoren ‹ « ≈.
StandardEine Formel statt eines Werts — per Shunting-Yard ausgewertet im Kontext der Holarchie.
Opt-inSubholons gegen einen Filter prüfen: Attribute, Operatoren, und/oder/xor.
StandardDaten aus einer URI laden — JSON, YAML, XML, CSV, TSV, Text.
Opt-inZwei Holons verständigen sich über TCP/IP — bidirektional, mit Rückweg.
Opt-inEin Formula-Holon hält eine Formel als Text. Beim Abruf wird sie ausgewertet — Referenzen lösen sich über die umgebende Holarchie auf.
rect = Holatri::Holon.new(:rect, {})
rect.add(Holatri::Holon.new(:w, 3))
rect.add(Holatri::Holon.new(:h, 4))
rect.add(Holatri.formula(:area, "w * h"))
rect[:area] # => 12
# Funktionen, Klammern, Potenz, unäres Minus …
Holatri.formula(:d, "sqrt(3 ^ 2 + 4 ^ 2)").value # => 5.0
Jedes Filterkriterium ist ein Key/Value-Paar. Der Operator steckt im Schlüssel, der Referenzwert ist der Wert. Kombiniert wird mit and, or, xor.
shelf.find(Holatri.filter(class: Formula)) # alle Formeln
shelf.find(Holatri.filter(gt: 5, lt: 25)) # 5 < value < 25 (UND)
shelf.find(Holatri.filter(or: [{ eq: 10 }, { eq: 30 }]))
shelf.find(Holatri.filter(value: 42), deep: true) # rekursiv
gem "holatri" in die Gemfile, dann bundle install.
Holons aus Hash und Array erzeugen — der Typ leitet sich ab.
Per gain(:computable) oder klassenweit via capability.