quarta-feira, 6 de outubro de 2010

Exercício 1.20 - Máximo divisor comum: ordem aplicativa e ordem normal

Exercício 1.20

O processo que um procedure gera é, obviamente, dependente das regras usadas pelo interpretador. Por exemplo, considere o procedure iterativo gcd apresentado. Suponha que interpretássemos esse procedure usando ordem normal de avaliação, conforme explicado na seção 1.1.5. (A ordem normal de avaliação para o if é descrita no exercício 1.5). Usando o método da substituição (para a ordem normal), ilustre o processo gerado ao avaliar (gcd 206 40) e indique o as operações remainder que são de fato realizadas. Quantas operações remainder são realizadas na avaliação em ordem normal de (gcd 206 40)? E na ordem aplicativa?

Resposta:

Para resolver o exercício vamos supor que remainder é uma primitiva.
Ordem aplicativa

Abaixo é mostrada a avaliação da expressão usando ordem aplicativa. A operação remainder é efetuada 4 vezes.

Agora, façamos a avaliação usando ordem normal


Vemos, portanto, que, na ordem normal, há 18 avaliações de remainder, enquanto na ordem aplicativa há apenas 4.
OBS: O código mostrado não fica bem formatado com a largura de coluna padrão do blog. Para facilitar o acompanhamento, sugiro que copie e cole o mesmo para um editor que destaca a sintaxe. Atualmente, estou usando PLT-Racket para resolver os exercícios.