Track
/
Tcl
Tcl
/
Esercizi
/
Operazioni su array
Operazioni su array

Operazioni su array

Medio

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.

Il comando apply di Tcl

I casi di test possono sembrare confusi. Dovrai implementare questo:

set myList {alpha beta gamma delta}
listOps::filter $myList {{word} {expr {[string length $word] == 4}}

Perché quell'ultimo argomento ha così tante parentesi graffe?

Ricorda che il comando proc è definito così:

proc procName argList body

Tcl ha un comando apply:

apply func ?arg1 arg2 ...?

questo «func» è una lista di due elementi, {argList body}, che è essenzialmente una proc anonima (o «lambda»). Il comando apply invoca quella proc anonima, passandole gli argomenti che le servono.

Per esempio, questi sono equivalenti:

# using proc
proc myReverse {str} {return [string reverse $str]}
puts [myReverse "Hello, World!"]

# using apply
puts [apply {{str} {string reverse $str}} "Hello, World!"]

# or, store the func in a variable
set func {{str} {string reverse $str}}
puts [apply $func "Hello, World!"]

Usare apply rende più semplice passare in giro blocchi di codice.

Rif: apply, proc.

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

Vuoi iniziare Operazioni su array?

Iscriviti a Exercism per imparare e padroneggiare Tcl con 135 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.