SICP, Esquema, Drracket Pergunta: Função do Timer/Profiler?
Pergunta
Atualmente, estou tentando fazer o Exercício 1.22, que precisa de uma função chamada tempo de execução que retorne o número de milissegundos que o sistema está em execução. No entanto, meu ambiente (R5RS) não parece ter isso. Também não tem tempo, milissegundos de corrente, corrente-unha-milissegundos, etc.
A que função eu tenho acesso, para perfilar minha função? Quais funções retornam o número de milissegundos, microssegundos, etc., que passaram? É claro que eu preferiria o timer de precisão mais alto disponível.
Solução
Provavelmente, a melhor coisa a fazer é trocar o idioma no drracket para "usar o idioma declarado na fonte" e iniciar seu arquivo com #lang racket
. Então funções como current-seconds
e amigos estarão disponíveis.
Como alternativa, você pode usar a biblioteca de perfil, disponível via (require profile)
e documentado aqui.
Finalmente, você pode querer olhar para o Neil Van Dyke's Biblioteca Sicp para Drracket.
Outras dicas
eu usei atual-unexact-milissegundos Quando fiz esse exercício. Alerta de spoiler: Você pode ver minha solução no meu blog em Exercício SICP 1.22: Teste Prime Timed.
A propósito, eu só resolvi esse problema depois de fazer uma pergunta semelhante, Existe um equivalente à primitiva de "tempo de execução" de Lisp em esquema?