Mi sono imbattuto in una domanda che (alla fine) mi ha portato a chiedermi dell'aritmetica dell'array. Sto pensando specificamente a Ruby, ma penso che i concetti siano indipendenti dal linguaggio.
Quindi, addizione e sottrazione sono definite, in Ruby, come tali:
[1,6,8,3,6] + [5,6,7] == [1,6,8,3,6,5,6,7] # All the elements of the first, then all the elements of the second
[1,6,8,3,6] - [5,6,7] == [1,8,3] # From the first, remove anything found in the second
e array * scalar è definito:
[1,2,3] * 2 == [1,2,3,1,2,3]
Ma
Che cosa, concettualmente, dovrebbe essere il seguente? Nessuno di questi è (per quanto posso trovare) definito:
- Array x Array:
[1,2,3] * [1,2,3] #=> ?
- Array / Scalar:
[1,2,3,4,5] / 2 #=> ?
- Array / Scalar:
[1,2,3,4,5] % 2 #=> ?
- Array / Array:
[1,2,3,4,5] / [1,2] #=> ?
- Array / Array:
[1,2,3,4,5] % [1,2] #=> ?
Ho trovato alcune descrizioni matematiche di queste operazioni per la teoria degli insiemi, ma non sono riuscito a seguirle e gli insiemi non hanno duplicati (gli array fanno).
Modifica: Nota, faccio non aritmetica media vettoriale (matrice), che è completamente definita.
Edit2: Se questo è lo scambio di stack sbagliato, dimmi qual è quello giusto e lo sposterò.
Modifica 3: aggiungi operatori mod all'elenco.
Modifica 4:
I figura array / scalar
è derivabile da array * scalar
:
a * b = c
=> a = b / c
[1,2,3] * 3 = [1,2,3]+[1,2,3]+[1,2,3] = [1,2,3,1,2,3,1,2,3]
=> [1,2,3] = [1,2,3,1,2,3,1,2,3] / 3
Che, dato che la divisione del programmatore ignora il modulo rimasto e ha modulo:
[1,2,3,4,5] / 2 = [[1,2], [3,4]]
[1,2,3,4,5] % 2 = [5]
Tranne che queste operazioni sono chiaramente non reversibili (non quel modulo è mai), che non è ideale.
Modifica: ho posto una domanda su Math che mi ha portato a Multisets . Penso che forse gli array estensibili siano "multiset", ma non ne sono ancora sicuro.