Track
/
Clojure
Clojure
/
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.

Appendice

Note

Le istruzioni qui sopra sono sincronizzate con un repository condiviso per garantire coerenza tra tutti i track dei linguaggi. Questa appendice fornisce chiarimenti aggiuntivi o modifica le istruzioni dove serve, per allinearsi meglio agli obiettivi del track Clojure.

Per questo esercizio del track Clojure, presumi che sia l'input che l'output siano vettori, come indicato dai test. Come obiettivo extra, considera come implementare un approccio che non usi le liste per i passaggi intermedi.

È importante non riutilizzare le funzioni predefinite di Clojure con funzionalità simili: farlo ridurrebbe il valore didattico dell'esercizio. Le funzioni principali del namespace clojure.core da evitare includono into, concat, cat, lazy-cat, mapcat, flatten, filter, filterv, remove, count, map, mapv, reduce, transduce, reverse e rseq.

Obiettivi opzionali

L'obiettivo opzionale è pensato per chi vuole una sfida in più e presuppone che tu abbia già completato l'obiettivo principale.

Prova a superare i test ideando un approccio che presuppone quanto segue:

  • Che sia l'input che l'output siano liste invece che vettori. Nota che, come al solito, non serve modificare i test.
  • Che i vettori non possano essere usati per i passaggi intermedi.

Se decidi di pubblicarlo, assicurati di includere un commento che indichi che affronta l'obiettivo opzionale dell'uso delle liste. Non dimenticare di aggiornare le docstring!

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

Vuoi iniziare Operazioni su array?

Iscriviti a Exercism per imparare e padroneggiare Clojure con 12 concetti105 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.