A cosa servono gli array ricorsivi?

Ruby supporta matrici ricorsive (cioè matrici auto-contenenti):

a = [] # => [] a < [[...]] a.first == a # => true 

Questo è intrinsecamente interessante, ma che lavoro puoi fare con esso?

Un grafico diretto con bordi indifferenziati potrebbe avere ogni vertice rappresentato semplicemente come una matrice dei vertici raggiungibili da quel vertice. Se il grafico avesse cicli, avresti una “matrice ricorsiva”, specialmente se un bordo potrebbe ricondurre allo stesso vertice.

Ad esempio, questo grafico:
grafico ciclico diretto
… potrebbe essere rappresentato in codice come:

 nodes = { a:[], b:[], c:[], d:[] } nodes[:a] << nodes[:a] nodes[:a] << nodes[:b] nodes[:b] << nodes[:a] nodes[:b] << nodes[:c] p nodes #=> {:a=>[[[...], []], [...]], :b=>[[[...], [...]], []], :c=>[], :d=>[]} 

Di solito la rappresentazione di ogni vertice sarebbe più “robusta” (ad esempio un’istanza di class con proprietà per il nome e la matrice di bordi in uscita), ma non è imansible immaginare un caso in cui si desidera una rappresentazione molto leggera dei dati (per molto grandi grafici) e quindi necessario per utilizzare una rappresentazione minima come questa.

Ruby supporta matrici ricorsive

Per me la domanda è: perché non dovrebbe supportarlo?

Una matrice è semplicemente una raccolta di riferimenti. Dovrebbe controllare ogni elemento e generare un errore se uno dei riferimenti si riferisce alla raccolta stessa, quindi impedire la ricorsione o utilizzarlo per grafici come l’esempio di Phrogz.

Quindi non penso che sia una funzionalità, ma se lo fosse, la maggior parte delle lingue che conosco ce l’ha, anche Java .. Basta usare Object come elementi Array.