Track
/
Common Lisp
Common Lisp
/
Esercizi
/
La partizione numerica di Logan
La partizione numerica di Logan

La partizione numerica di Logan

Esercizio di apprendimento

Introduzione

Riduzione

La riduzione consiste nell'applicare ripetutamente una funzione a ogni elemento di una sequenza e nell'accumulare in qualche modo i risultati. La funzione applicata prende due parametri: il valore accumulato corrente e l'elemento da elaborare. Il suo risultato deve essere il nuovo valore accumulato.

In Common Lisp il procedimento si esegue con la funzione reduce. Nella sua forma più semplice si presenta così:

(reduce #'function-to-apply sequence :initial-value value)

Nota che viene fornito un valore iniziale: sarà il «valore accumulato corrente» passato alla funzione quando viene elaborato il primo elemento.

Ecco un esempio che somma i numeri della lista partendo da un valore iniziale di 10:

(reduce #'+ '(1 2 3 4) :initial-value 10) ; => 20

Nota che, se la sequenza è vuota, la funzione non viene mai chiamata e la forma si valuta nel valore iniziale.

Istruzioni

Logan, l'alieno Lisp, ama i numeri e anche organizzare.

Ti chiedono di aiutarli a scrivere una funzione che prende una lista di numeri e produce una coppia di due liste: la prima contiene tutti i numeri dispari, la seconda tutti i numeri pari.

1. Categorizzare un numero

Per prima cosa dovrai creare una funzione che prende una coppia di due liste e un numero e inserisce quel numero nella sottolista corretta, a seconda che sia dispari o pari:

(categorize-number '((1) . (2)) 23) ; => ((23 1) . (2))
(categorize-number '((1) . (2)) 42) ; => ((1) . (42 2))

2. Categorizzare tanti numeri

Ora, usando la funzione che hai appena creato, puoi scrivere un'altra funzione che prende una lista di numeri e li categorizza come hai fatto qui sopra:

(partition-numbers '(1 2 3 4))     ; => ((3 1) . (4 2))
(partition-numbers '(42 31 24 13)) ; => ((13 31) . (24 42))
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Common Lisp Exercism

Vuoi iniziare La partizione numerica di Logan?

Iscriviti a Exercism per imparare e padroneggiare Common Lisp con 27 concetti92 esercizi e il mentoring di persone reali, tutto gratis.