Feu una funció transforma_a_base_10 que, donada una base
b
(2 b 9),
retorna una altra funció (anomenem-la fret):
(def fret (transforma_a_base_10 b)).
Aquesta funció fret retornada ha de ser tal que espera
rebre un dígit d en base b
(0 d b)
que forma part del nombre, en base b, que volem expressar
en base 10. La crida (fret d) retorna una altra funció que
fa el mateix procés. Tot plegat acaba en cridar aquesta funció retornada
amb -1, aleshores es retornarà el nombre format pels dígits
que hem anat passant successivament a les funcions retornades (el primer
és considerat el dígit de més pes), però expressat en base 10.
Exemple: Volem passar 101011 (en base 2) a base 10 (on ).
Cal fer (def h2 (transforma_a_base_10 2)), i després
només cal cridar successivament les funcions retornades per les crides a
h2 amb els dígits de 101011, acabant amb -1:
(((((((h2 1) 0) 1) 0) 1) 1) -1) retorna 43.
No podeu fer servir cap mena d’estructura de dades, ni cap mena de seqüència. Només nombres i funcions.
Input
(let [fret (transforma_a_base_10 2)] (((((((fret 1) 0) 1) 0) 1) 1) -1))
Output
43
Input
(let [fret (transforma_a_base_10 3)] ((((((fret 2) 2) 1) 0) 2) -1))
Output
227
Input
(let [fret (transforma_a_base_10 5)] (((((((((fret 4) 3) 2) 0) 1) 4) 3) 3) -1))
Output
365868
Input
(let [fret (transforma_a_base_10 9)] (((((((fret 8) 7) 1) 0) 3) 5) -1))
Output
519080