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.
apply di TclI 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.
Iscriviti a Exercism per imparare e padroneggiare Tcl con 135 esercizi e il mentoring di persone reali, tutto gratis.
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.