Nested Spintax
Come l'annidamento trasforma lo spinning piatto in un potente motore di template — e perché l'approccio Spintax.Net è lo standard.
Cos'è il Nested Spintax?
Lo spintax normale sceglie un'opzione casuale da un elenco: {red|blue|green} produce uno di tre colori. Il Nested Spintax inserisce spintax dentro altro spintax — come una matrioska, dove ogni strato rivela più variazione all'interno.
Quando il motore incontra strutture annidate, risolve dall'espressione più interna verso l'esterno. Le parentesi graffe interne vengono valutate per prime e il loro risultato diventa parte dell'espressione esterna.
{red|{dark|light} blue} car
Qui {dark|light} si risolve per primo (ad es. dark), producendo {red|dark blue}. Poi l'enumerazione esterna sceglie un'opzione: red o dark blue.
Perché l'annidamento è importante
Senza annidamento, le opzioni sono piatte. Tre enumerazioni con tre opzioni ciascuna danno 3 + 3 + 3 = 9 frammenti. Con l'annidamento, gli stessi elementi si combinano in modo moltiplicativo: 3 × 3 × 3 = 27 varianti uniche da un singolo template compatto.
Questa crescita esponenziale è la chiave per generare contenuti davvero unici. Un template moderatamente complesso con enumerazioni e permutazioni annidate può produrre migliaia o milioni di output distinti — il tutto da un'unica fonte accuratamente elaborata.
Limitazioni comuni di altri strumenti
La maggior parte degli strumenti spintax gestisce solo le basi. Ecco cosa va tipicamente storto:
- Solo enum-in-enum — supportano
{a|{b|c}}ma nient'altro. Nessuna permutazione, nessuna variabile, nessun include all'interno di altri elementi. - Limiti di profondità — molti parser si bloccano dopo 2–3 livelli di annidamento, producendo silenziosamente output corrotto.
- Nessuna pulizia — dopo la risoluzione delle strutture annidate, gli spazi collassano, la punteggiatura si raddoppia, le maiuscole si rompono. Il risultato richiede modifica manuale.
- Nessuna componibilità — senza variabili e include, ogni template è un'isola. Riutilizzare blocchi comuni significa copia-incolla.
L'approccio Spintax.Net
Spintax.Net implementa l'annidamento come funzionalità di prima classe, non come un ripensamento. Cinque decisioni di design lo rendono possibile:
- Profondità arbitraria — non c'è limite di annidamento. Dieci livelli di profondità funzionano come due.
- Annidamento tra elementi diversi — enumerazioni dentro permutazioni, permutazioni dentro enumerazioni, variabili contenenti strutture annidate, include che incorporano interi template annidati. Qualsiasi elemento dentro qualsiasi altro.
- Risoluzione dall'interno verso l'esterno — il motore risolve sempre dal livello più profondo verso l'esterno. Questo rende la valutazione prevedibile e facilmente debuggabile.
- Post-elaborazione intelligente — dopo che tutti gli annidamenti sono risolti, il motore corregge automaticamente le maiuscole, elimina gli spazi doppi, corregge la spaziatura della punteggiatura e gestisce i confini delle frasi. L'output è testo pulito, non concatenazione grezza.
- Sicurezza — il rilevamento dei riferimenti circolari per
#includepreviene i cicli infiniti. Le regole di scope delle variabili (runtime > locale > globale) prevengono sovrascritture accidentali.
Dal semplice all'avanzato
1. Enumerazione dentro enumerazione
{{premium|luxury} sedan|{compact|mid-size} SUV}
Le enumerazioni interne si risolvono per prime, poi quella esterna sceglie il risultato. Output possibili: premium sedan, luxury sedan, compact SUV, mid-size SUV.
2. Enumerazione dentro permutazione
[<minsize=2;maxsize=3;sep=", ";lastsep=" and "> {red|blue} apples|{big|small} oranges|bananas]
Ogni elemento della permutazione contiene la propria enumerazione. Il motore risolve prima le enumerazioni interne, poi mescola e unisce. Esempio di output: blue apples, bananas and small oranges.
3. Variabili #set con spintax annidato
#set %product% = {{premium|budget} {laptop|tablet}|{smart|classic} phone}
#set %action% = {Buy|Get|Order}
%action% your new %product% today!
#set è una macro: conserva lo spintax annidato non risolto e lo ritira a sorte a ogni riferimento, quindi due menzioni di %product% possono produrre due prodotti diversi. Combinato con più variabili, il numero di varianti si moltiplica rapidamente.
4. #def — estratto una volta, vale ovunque
#def %brand% = {{Nord|Prime} Tools|Acme {Labs|Works}}
%brand% ships today. Order %brand% now!
#def risolve il suo spintax annidato una volta per render e mantiene quel risultato in ogni riferimento: qui entrambe le menzioni nominano lo stesso brand. Usa #def quando i riferimenti ripetuti devono coincidere (brand, contatori); #set quando ogni riferimento deve variare per conto suo.
5. Condizionali attorno a blocchi annidati
{?PLAN?{Upgrade to|Unlock} {Pro|Premium} features|{Try|Start with} the free tier}
Il pre-pass {?VAR?then|else} sceglie il ramo in base al fatto che %PLAN% abbia un valore — prima di qualsiasi scelta casuale. Il ramo scartato viene eliminato per intero: nulla al suo interno viene valutato o estratto.
6. Plurali con contatore annidato
#def %n% = {2|5|21}
Renders %n% {plural %n%: variant|variants} per click.
Il contatore è a sua volta spintax — e la sua variabile deve essere #def, non #set: la forma si sceglie dopo la risoluzione del contatore, e una macro in quel momento sarebbe ancora spintax non risolto. Quante forme indicare lo decide il locale del render: due in italiano o inglese, tre in russo o ucraino.
7. Include con annidamento
/# main template #/
#include "hero-text"
{Check out|Discover|Explore} our [<, > features|plans|pricing].
Il template incluso può a sua volta contenere enumerazioni, permutazioni, variabili e persino altri include. Il rilevamento dei riferimenti circolari mantiene tutto al sicuro.
IA + Nested Spintax
I grandi modelli linguistici sono eccellenti nella scrittura di template annidati complessi. Un singolo prompt può produrre un template con più livelli di annidamento, blocchi condizionali guidati dal valore ({?VAR?…}), plurali consapevoli del locale e sezioni riutilizzabili tramite include.
Il flusso di lavoro è semplice: usa l'IA per creare il template una volta, poi usa Spintax per generare varianti uniche a basso costo per sempre. Una chiamata API per creare il template. Zero chiamate API per generare ogni variante. Il Nested Spintax è ciò che rende tutto questo economicamente sostenibile — più profondo è l'annidamento, più output unici per template.
Per iniziare
Pronto a usare il Nested Spintax nei tuoi progetti? Provalo dal vivo nel playground — incolla un esempio qui sopra e guardalo risolversi. Il riferimento alla sintassi contiene la specifica completa, e per la produzione scegli uno dei quattro motori open source — oppure il plugin WordPress se il tuo runtime è quello.