Iniciando Programação em Scheme

Lucas Vieira

Instalando o Dr. Racket e habilitando o modo Scheme

  • Clicar em Arquivo
  • Clicar em Package Manager…
  • Escrever sicp no campo Package Source
  • Clicar em Install
  • Após a instalação, ir em Arquivo > Fechar, no Package Manager
#lang sicp

Programando em Lisp

Expressões primitivas

#lang sicp

123            ;; Número
"Hello world!" ;; String
'teste         ;; Símbolo

Expressões compostas

Aplicação comum

#lang sicp

(+ 123 456) ;;=> 579

Aplicação aninhada

#lang sicp

(+ 123
   (* 456 789)
   10) ;;=> 359917

Pretty-printing

  • Exemplo 1
    #lang sicp
    
    (+ (* 3 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6))
    
  • Exemplo 2
    #lang sicp
    
    (+ (* 3
          (+ (* 2 4)
             (+ 3 5)))
       (+ (- 10 7)
          6))
    

Nomes e contexto

#lang sicp

(define size 2)

(define pi 3.14159)

(define radius 10)

(define area-of-circle (* pi (* radius radius)))

(define circumference (* 2 pi radius))

Interpretando combinações

#lang sicp

(* (+ 2 (* 4 6))
   (+ 3 5 7))

Para interpretar uma combinação:

  1. Interprete as sub-expressões da combinação;
  2. Aplique o procedimento aos argumentos.
  3. Procedimento: valor da primeira subexpressão.
  4. Argumentos: valores de todas as subexpressões que não sejam a primeira.
(* (+ 2 (* 4 6))
   (+ 3 5 7))

(* (+ 2 24)
   (+ 3 5 7))

(* 26 15)

390

Exercícios

Exercício 1

Escreva a expressão a seguir no formato de s-expression.

\begin{align*} \frac{2 + 3 + 4}{6 \cdot 5 + 12} \end{align*}

Exercício 2

(sicp, Exercise 1.2) Escreva a expressão a seguir no formato de s-expression.

\begin{align*} \frac{5 + 4 + \left(2 - \left(3 - \left(6 + \frac{4}{5}\right)\right)\right)}{3(6 - 2)(2 - 7)} \end{align*}

Exercício 3

Defina um valor qualquer para x, escreva a expressão a seguir em s-expressions e calcule seu valor.

Não substitua diretamente o valor de x.

\begin{align*} \frac{2x^2 + 3x + 4}{4x + 3} \end{align*}

Exercício 4

(sicp, Exercise 1.1, adaptado) Abaixo, temos uma sequência de expressões. Qual é o resultado mostrado pelo interpretador, em resposta a cada expressão?

#lang sicp

10

(+ 5 3 4)

(- 9 1)

(/ 6 2)

(+ (* 2 4) (- 4 6))

(define a 3)
(define b (1+ a))

(+ a b (* a b))

(= a b)

\newpage

Bibliography

  • [sicp] "Harold Abelson, Gerald Jay Sussman & Julie Sussman", Structure and Interpretation of Computer Programs, MIT Press (1996).

Bibliography

  • [sicp] "Harold Abelson, Gerald Jay Sussman & Julie Sussman", Structure and Interpretation of Computer Programs, MIT Press (1996).