Track
/
AWK
AWK
/
Esercizi
/
Operazioni su array
Operazioni su array

Operazioni su array

Difficile

Istruzioni

Implementa le operazioni di base sugli array.

Nei linguaggi funzionali, le operazioni sugli array come length, map e reduce sono molto comuni. Implementa una serie di operazioni di base sugli array, senza usare le funzioni esistenti.

Il numero preciso e i nomi delle operazioni da implementare dipenderà dal track, per evitare conflitti con i nomi già esistenti, ma le operazioni generali che implementerai includono:

  • append (dati due array, aggiungi tutti gli elementi del secondo array alla fine del primo array);
  • concatenate (data una serie di array, combina tutti gli elementi di tutti gli array in un unico array appiattito);
  • filter (dati un predicato e un array, restituisci l'array di tutti gli elementi per cui predicate(item) è True);
  • length (dato un array, restituisci il numero totale di elementi che contiene);
  • map (date una funzione e un array, restituisci l'array dei risultati dell'applicazione di function(item) a tutti gli elementi);
  • foldl (date una funzione, un array e un accumulatore iniziale, piega (riduci) ogni elemento nell'accumulatore da sinistra);
  • foldr (date una funzione, un array e un accumulatore iniziale, piega (riduci) ogni elemento nell'accumulatore da destra);
  • reverse (dato un array, restituisci un array con tutti gli elementi originali, ma in ordine inverso).

Nota: l'ordine in cui gli argomenti vengono passati alle funzioni fold (foldl, foldr) è significativo.

Nuovi concetti di AWK

Consulta le istruzioni dell'esercizio matrix per ripassare alcune interessanti funzionalità del linguaggio GNU awk.

Chiamata dinamica di funzioni

Le funzioni awk non sono oggetti di prima classe: non si possono passare in giro come accade in altri linguaggi. Tuttavia, una variabile può contenere il nome di una funzione (una stringa), e la funzione viene chiamata con una notazione speciale, @varname(args). Un esempio:

function greet(name) {
    print "Hello, " name
}
BEGIN {
    greet("John")       # => "Hello, John"

    f = "greet"
    f("Bill")           # => error
    @f("Bill")          # => "Hello, Bill"
}

Questo meccanismo è descritto in Chiamate indirette di funzioni. Si tratta di un'estensione di gawk.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
AWK Exercism

Vuoi iniziare Operazioni su array?

Iscriviti a Exercism per imparare e padroneggiare AWK con 3 concetti92 esercizi e il mentoring di persone reali, tutto gratis.

Approfondimento su Operazioni su array!

Goditi un'introduzione pratica alla ricorsione, esplora le alternative imperative e funzionali a Operazioni su array e approfondisci la ricorsione in coda e le funzioni di accumulo.