Es defineix la funció !n (CAP, tema 1,
plana 25), de la següent manera (!n s’anomena
subfactorial):
Podem implementar-la, de manera molt ineficient, fent servir la definició matemàtica:
(defn subfact_recursiva [n]
(cond
(or (= n 0) (= n 2)) 1
(= n 1) 0
:else (*' (dec n)
(+' (subfact_recursiva (dec n))
(subfact_recursiva (- n 2))))))
Passeu aquesta funció a continuation passing style per
obtenir-ne la versió recursiva final. Anomeneu-la
subfact-cps.
Després, trampolinitzeu subfact-cps per no
obtenir l’error de Stack Overflow. Anomeneu-la
subfact-t.
Cal que envieu un fitxer amb la definició de les
dues funcions subfact-cps i
subfact-t.
Input
(subfact-cps 5 identity) (subfact-cps 10 identity) (subfact-cps 15 identity) (subfact-t 5) (subfact-t 10) (subfact-t 15) (subfact-t 20)
Output
44 1334961 481066515734 44 1334961 481066515734 895014631192902121