[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 pré-fixa $$\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.3] Defina uma função que receba $3$ números como parâmetros e retorne a soma dos quadrados dos dois maiores números.
Utilizando apenas as funções primitivas zero?
, add1
e sub1
, escreva as
funções >
, >=
, <
, <=
e =
. Cada função deve receber como parâmetro
dois números naturais e executar a operação de comparação apropriada.
[tspl 2.8.6] Recursão indireta é quando dois (ou mais) procedimentos usam um
ao outro. Defina dois procedimentos impar?
e par?
, um em termos do
outro. (Dica: O que cada um deve retornar quando o argumento for $0$?)
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$.
Defina uma função div
que receba como parâmetro dois números naturais $a$
e $b$ e calcule a divisão inteira de $a$ por $b$. De que maneira o código
desta função é diferente do template da função para números naturais? Explique.