Track
/
Clojure
Clojure
/
Esercizi
/
Le deliziose lasagne di Lucian
Le deliziose lasagne di Lucian

Le deliziose lasagne di Lucian

Esercizio di apprendimento

Introduzione

In Clojure, associare un valore a un nome si chiama var. Le var di primo livello (globali) sono simili alle costanti di altri linguaggi.

Le var di primo livello si definiscono con def:

(def fingers 10)

fingers
;;=> 10

Puoi usare defn per definire una funzione che accetta zero o più argomenti. Questa è una funzione che somma 2 numeri:

(defn add [x y]
  (+ x y))

Questa funzione accetta 2 argomenti, che vengono inseriti nel vettore [x y], seguiti dal corpo della funzione, che può contenere un numero qualsiasi di espressioni. Il valore restituito è sempre il risultato della valutazione dell'ultima espressione del corpo, (+ x y). Questa espressione è un array che rappresenta una chiamata di funzione. Il primo elemento dell'array è la funzione +, che viene valutata usando gli elementi successivi x e y come argomenti.

La funzione add definita sopra si chiama allo stesso modo:

(add 2 3)
;;=> 5

In Clojure le funzioni e i valori si possono usare solo dopo che sono stati definiti, cioè le forme vengono sempre valutate nell'ordine in cui compaiono.

In Clojure gli spazi bianchi non hanno alcun significato, se non quello di formattazione.

Le funzioni e le var di Clojure sono organizzate in namespace. Un namespace raggruppa funzionalità correlate e si definisce con la macro ns:

(ns calculator)

(def pi 3.14)

(defn add [x y]
  (+ x y))

Clojure supporta due tipi di commenti. I commenti su una sola riga sono preceduti da ;, mentre la forma comment serve a impedire la valutazione di tutto ciò che si trova tra (comment e ).

Istruzioni

In questo esercizio scriverai del codice per aiutarti a cucinare una lasagna fantastica dal tuo libro di cucina preferito.

Hai quattro attività, tutte legate al tempo impiegato per cucinare la lasagna.

1. Definisci il tempo di cottura previsto in minuti

Definisci la var expected-time per controllare quanti minuti la lasagna deve stare in forno. Secondo il libro di cucina, il tempo di cottura previsto in minuti è 40:

expected-time
;;=> 40

2. Calcola il tempo di cottura rimanente in minuti

Definisci la funzione remaining-time che prende come argomento i minuti effettivi che la lasagna ha trascorso in forno e restituisce quanti minuti la lasagna deve ancora rimanere in forno, in base al tempo di cottura previsto in minuti dell'attività precedente.

(remaining-time 30)
;;=> 10

3. Calcola il tempo di preparazione in minuti

Definisci la funzione prep-time che prende come argomento il numero di strati che hai aggiunto alla lasagna e restituisce quanti minuti hai impiegato a prepararla, supponendo che ogni strato richieda 2 minuti di preparazione.

(prep-time 2)
;;=> 4

4. Calcola il tempo di lavoro totale in minuti

Definisci la funzione total-time che prende due argomenti: il primo argomento è il numero di strati che hai aggiunto alla lasagna, e il secondo argomento è il numero di minuti che la lasagna ha trascorso in forno. La funzione deve restituire quanti minuti in totale hai lavorato a cucinare la lasagna, cioè la somma del tempo di preparazione in minuti e del tempo in minuti che la lasagna ha trascorso in forno al momento.

(total-time 3 20)
;;=> 26
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Clojure Exercism

Vuoi iniziare Le deliziose lasagne di Lucian?

Iscriviti a Exercism per imparare e padroneggiare Clojure con 12 concetti105 esercizi e il mentoring di persone reali, tutto gratis.