[sicp 1.1] A seguir está uma lista de expressões. Qual é o resultado impresso pelo interpretador em resposta a cada expressão? Assuma que as expressões serão avaliadas na ordem em que são apresentadas.
10
(+ 5 3 4)
(- 9 1)
(/ 6 2)
(+ (* 2 4) (- 4 6))
(define a 3)
(define b (+ a 1))
(+ a b (* a b))
(= a b)
(if (and (> b a) (< b (* a b)))
b
a)
(cond [(= a 4) 6]
[(= b 4) (+ 6 7 a)]
[else 25])
(+ 2 (if (> b a) b a))
(* (cond ((> a b) a)
((< a b) b)
(else -1))
(+ a 1))
[sicp 1.2] Traduza a seguinte expressão para a forma prefixa $$\frac{5 + 4 + (2 - (3 - (6 + \frac{4}{5})))}{3 (6 - 2) (2 - 7)}$$
[tspl 2.2.2] Experimente os procedimentos +
, -
, *
e /
e determine as
regras do Racket para o tipo do valor de retorno para cada procedimento
quando são dados diferentes tipos de argumentos numéricos.
[sicp 1.4] O modelo de avaliação visto em sala permite combinações em que os operadores são expressões compostas. Use está observação para descrever o comportamento do seguinte procedimento:
(define (a-plus-abs-b a b)
((if (> b 0) + -) a b))
[sicp 1.5] Ben Bitdiddle inventou um método para determinar se um interpretador está usando avaliação com ordem aplicativa ou avaliação com ordem normal. Ele definiu os seguintes procedimentos:
(define (p) (p))
(define (test x y)
(if (= x 0)
0
y))
Então avaliou a seguinte expressão
(test 0 (p))
Qual é o comportamento que Ben irá observar com um interpretador que usa avaliação com ordem aplicativa? Qual é o comportamento que ele irá observar com um interpretador que usa avaliação com ordem normal? Explique a sua resposta.
[sicp 1.9] Cada um dois seguintes procedimentos define um método para
adicionar dois inteiros positivos em termos dos procedimentos add1
, que
incrementa seu argumento por 1, e sub1
, que decrementa seu argumento por 1.
(define (+ a b)
(if (= a 0)
b
(add1 (+ (sub1 a) b))))
(define (+ a b)
(if (= a 0)
b
(+ (sub1 a) (add1 b))))
Usando o modelo de substituição, ilustre o processo gerado por cada
procedimento na avaliação (+ 4 5)
. Estes procedimentos são iterativos ou
recursivos?
[sicp 1.3] Defina uma função que receba 3 números como parâmetros e retorne a soma dos quadrados dos dois maiores números.
[tspl 2.8.6] Recursão indireta é quando dois (ou mais) procedimentos usam um
ao outro. Defina dois procedimentos odd?
e even?
, um em termos do outro.
(Dica: O que cada um deve retornar quando o argumento for 0?)
[pp99 2.01] Defina um predicado para determinar se um dado número inteiro positivo é primo.
Defina uma função para determinar quantos números primos existem em um dado intervalo.
Defina uma função para determinar se um dado número inteiro positivo é perfeito. Um número é perfeito se a soma dos seu divisores próprios é igual a ela. Por exemplo, o número 6 é perfeito, pois 6 = 1 + 2 + 3. O número 28 também é perfeito, pois 28 = 1 + 2 + 4 + 7 + 14.
[pp99 2.07] Defina uma função que determine (usando o algoritmo de Euclid) o maior divisor comum de dois números.
[pp99 2.08] Defina uma função que determine se dois número são coprimos. Dois números são coprimos se o maior divisor comum entre eles é 1.
Defina uma função que determine se um dado número inteiro positivo é palíndromo. Um número é palíndromo se permanece o mesmo quando os dígitos são revertidos, ou seja, o número é simétrico. Por exemplo, 72027 é palíndromo.
Defina uma função que receba como parâmetro um número inteiro positivo $n$ e calcule o $n$-ésimo número primo.