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 1010112 = 4310).
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.
Observacions
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