sequências e streams - malbarbo...sequências e streams marcoalbarbosa malbarbo.pro.br departamento...

34
Sequências e streams Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. http://github.com/malbarbo/na-progfun

Upload: others

Post on 21-Aug-2021

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Sequecircncias e streams

Marco A L Barbosamalbarboprobr

Departamento de InformaacuteticaUniversidade Estadual de Maringaacute

cbaEste trabalho estaacute licenciado com uma Licenccedila Creative Commons - Atribuiccedilatildeo-CompartilhaIgual 40 Internacional

httpgithubcommalbarbona-progfun

Sequecircncias

Sequecircncias

bull Uma sequecircncia encapsula uma coleccedilatildeo ordenada de valores

bull Sequecircncias satildeo geralmente utilizadas com as formas sintaacuteticasfor

126

Sequecircncias

bull Tipos que satildeo sequecircncias

bull Listas

bull Strings

bull Streams

bull etc

226

Sequecircncias

bull Exemplos

gt (sequence (list 5 2 10))tgt (sequence casa)tgt (sequence (in-range 10 20))tgt (sequence 12)f

326

List comprehension

List comprehension

bull Utilizaccedilatildeo da notaccedilatildeo de conjunto para definir uma lista

bull Combina map e filter

bull Exemplo

bull S = 2x | x isin 110

bull T = 2x | x isin 110 x2 gt 8

426

List comprehension

bull Em Racket temos a forma sintaacutetica especial forlist

(define S (forlist ([x (in-range 1 11)])( 2 x)))

(define T (forlist ([x (in-range 1 11)]when (gt (sqr x) 8))

( 2 x)))

gt S(2 4 6 8 10 12 14 16 18 20)gt T(6 8 10 12 14 16 18 20)

526

List comprehension

bull Uma aproximaccedilatildeo da sintaxe do forlist eacute

(forlist (clause )body +)

clause = [id sequence-expr]| when boolean-expr| unless boolean-expr

626

List comprehension

bull Eacute possiacutevel fazer uma iteraccedilatildeo em paralelo em duas ou maissequecircncias

gt (forlist ([i (in-naturals)][x (list 3 5 2 4)])

(- x i))(3 4 0 1)

bull A funccedilatildeo in-naturals devolve uma sequecircncia com osnuacutemeros naturais

bull Como as sequecircncias tem tamanhos diferentes a iteraccedilatildeo eacuteinterrompida quando alguma sequecircncia termina

726

List comprehension

bull Existem muitas funccedilotildees preacute-definidas que satildeo uacuteteis nestecontexto

bull in-range

bull in-naturals

bull in-cycle

bull in-value

bull stop-before

bull stop-afer

bull Veja a referecircncia sobre sequecircncias

826

List comprehension

bull O Racket oferece ainda uma coleccedilatildeo de formas especiais parafazer iteraccedilatildeo em sequecircncias veja a referecircncia sobre iteraccedilotildees

926

Streams

Streams

bull Um stream eacute uma sequecircncia potencialmente infinita

bull Em geral os elementos do stream satildeo produzidos quando satildeonecessaacuterios neste caso um stream eacute uma sequecircncia preguiccedilosa

bull Streams tecircm vaacuterias utilidades mas vamos usaacute-losprincipalmente para definir ldquosequecircncias infinitasrdquo (como afunccedilatildeo in-naturals)

1026

Streams

bull As operaccedilotildees primitivas de streams satildeo semelhantes as daslistas

bull stream-cons

bull stream-first

bull stream-rest

1126

Streams

bull Outros funccedilotildees preacute-definidas

bull stream-ref

bull stream-gtlist

bull stream-fold

bull stream-map

bull stream-filter

bull Veja a referecircncia de streams

1226

Streams

bull Escrita de testes

bull Podemos utilizar as funccedilotildees preacute-definidas stream-ref estream-gtlist

bull Funccedilatildeo stream que cria um stream com os elementosespecificados (semelhante a funccedilatildeo list)

1326

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 2: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Sequecircncias

Sequecircncias

bull Uma sequecircncia encapsula uma coleccedilatildeo ordenada de valores

bull Sequecircncias satildeo geralmente utilizadas com as formas sintaacuteticasfor

126

Sequecircncias

bull Tipos que satildeo sequecircncias

bull Listas

bull Strings

bull Streams

bull etc

226

Sequecircncias

bull Exemplos

gt (sequence (list 5 2 10))tgt (sequence casa)tgt (sequence (in-range 10 20))tgt (sequence 12)f

326

List comprehension

List comprehension

bull Utilizaccedilatildeo da notaccedilatildeo de conjunto para definir uma lista

bull Combina map e filter

bull Exemplo

bull S = 2x | x isin 110

bull T = 2x | x isin 110 x2 gt 8

426

List comprehension

bull Em Racket temos a forma sintaacutetica especial forlist

(define S (forlist ([x (in-range 1 11)])( 2 x)))

(define T (forlist ([x (in-range 1 11)]when (gt (sqr x) 8))

( 2 x)))

gt S(2 4 6 8 10 12 14 16 18 20)gt T(6 8 10 12 14 16 18 20)

526

List comprehension

bull Uma aproximaccedilatildeo da sintaxe do forlist eacute

(forlist (clause )body +)

clause = [id sequence-expr]| when boolean-expr| unless boolean-expr

626

List comprehension

bull Eacute possiacutevel fazer uma iteraccedilatildeo em paralelo em duas ou maissequecircncias

gt (forlist ([i (in-naturals)][x (list 3 5 2 4)])

(- x i))(3 4 0 1)

bull A funccedilatildeo in-naturals devolve uma sequecircncia com osnuacutemeros naturais

bull Como as sequecircncias tem tamanhos diferentes a iteraccedilatildeo eacuteinterrompida quando alguma sequecircncia termina

726

List comprehension

bull Existem muitas funccedilotildees preacute-definidas que satildeo uacuteteis nestecontexto

bull in-range

bull in-naturals

bull in-cycle

bull in-value

bull stop-before

bull stop-afer

bull Veja a referecircncia sobre sequecircncias

826

List comprehension

bull O Racket oferece ainda uma coleccedilatildeo de formas especiais parafazer iteraccedilatildeo em sequecircncias veja a referecircncia sobre iteraccedilotildees

926

Streams

Streams

bull Um stream eacute uma sequecircncia potencialmente infinita

bull Em geral os elementos do stream satildeo produzidos quando satildeonecessaacuterios neste caso um stream eacute uma sequecircncia preguiccedilosa

bull Streams tecircm vaacuterias utilidades mas vamos usaacute-losprincipalmente para definir ldquosequecircncias infinitasrdquo (como afunccedilatildeo in-naturals)

1026

Streams

bull As operaccedilotildees primitivas de streams satildeo semelhantes as daslistas

bull stream-cons

bull stream-first

bull stream-rest

1126

Streams

bull Outros funccedilotildees preacute-definidas

bull stream-ref

bull stream-gtlist

bull stream-fold

bull stream-map

bull stream-filter

bull Veja a referecircncia de streams

1226

Streams

bull Escrita de testes

bull Podemos utilizar as funccedilotildees preacute-definidas stream-ref estream-gtlist

bull Funccedilatildeo stream que cria um stream com os elementosespecificados (semelhante a funccedilatildeo list)

1326

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 3: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Sequecircncias

bull Uma sequecircncia encapsula uma coleccedilatildeo ordenada de valores

bull Sequecircncias satildeo geralmente utilizadas com as formas sintaacuteticasfor

126

Sequecircncias

bull Tipos que satildeo sequecircncias

bull Listas

bull Strings

bull Streams

bull etc

226

Sequecircncias

bull Exemplos

gt (sequence (list 5 2 10))tgt (sequence casa)tgt (sequence (in-range 10 20))tgt (sequence 12)f

326

List comprehension

List comprehension

bull Utilizaccedilatildeo da notaccedilatildeo de conjunto para definir uma lista

bull Combina map e filter

bull Exemplo

bull S = 2x | x isin 110

bull T = 2x | x isin 110 x2 gt 8

426

List comprehension

bull Em Racket temos a forma sintaacutetica especial forlist

(define S (forlist ([x (in-range 1 11)])( 2 x)))

(define T (forlist ([x (in-range 1 11)]when (gt (sqr x) 8))

( 2 x)))

gt S(2 4 6 8 10 12 14 16 18 20)gt T(6 8 10 12 14 16 18 20)

526

List comprehension

bull Uma aproximaccedilatildeo da sintaxe do forlist eacute

(forlist (clause )body +)

clause = [id sequence-expr]| when boolean-expr| unless boolean-expr

626

List comprehension

bull Eacute possiacutevel fazer uma iteraccedilatildeo em paralelo em duas ou maissequecircncias

gt (forlist ([i (in-naturals)][x (list 3 5 2 4)])

(- x i))(3 4 0 1)

bull A funccedilatildeo in-naturals devolve uma sequecircncia com osnuacutemeros naturais

bull Como as sequecircncias tem tamanhos diferentes a iteraccedilatildeo eacuteinterrompida quando alguma sequecircncia termina

726

List comprehension

bull Existem muitas funccedilotildees preacute-definidas que satildeo uacuteteis nestecontexto

bull in-range

bull in-naturals

bull in-cycle

bull in-value

bull stop-before

bull stop-afer

bull Veja a referecircncia sobre sequecircncias

826

List comprehension

bull O Racket oferece ainda uma coleccedilatildeo de formas especiais parafazer iteraccedilatildeo em sequecircncias veja a referecircncia sobre iteraccedilotildees

926

Streams

Streams

bull Um stream eacute uma sequecircncia potencialmente infinita

bull Em geral os elementos do stream satildeo produzidos quando satildeonecessaacuterios neste caso um stream eacute uma sequecircncia preguiccedilosa

bull Streams tecircm vaacuterias utilidades mas vamos usaacute-losprincipalmente para definir ldquosequecircncias infinitasrdquo (como afunccedilatildeo in-naturals)

1026

Streams

bull As operaccedilotildees primitivas de streams satildeo semelhantes as daslistas

bull stream-cons

bull stream-first

bull stream-rest

1126

Streams

bull Outros funccedilotildees preacute-definidas

bull stream-ref

bull stream-gtlist

bull stream-fold

bull stream-map

bull stream-filter

bull Veja a referecircncia de streams

1226

Streams

bull Escrita de testes

bull Podemos utilizar as funccedilotildees preacute-definidas stream-ref estream-gtlist

bull Funccedilatildeo stream que cria um stream com os elementosespecificados (semelhante a funccedilatildeo list)

1326

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 4: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Sequecircncias

bull Tipos que satildeo sequecircncias

bull Listas

bull Strings

bull Streams

bull etc

226

Sequecircncias

bull Exemplos

gt (sequence (list 5 2 10))tgt (sequence casa)tgt (sequence (in-range 10 20))tgt (sequence 12)f

326

List comprehension

List comprehension

bull Utilizaccedilatildeo da notaccedilatildeo de conjunto para definir uma lista

bull Combina map e filter

bull Exemplo

bull S = 2x | x isin 110

bull T = 2x | x isin 110 x2 gt 8

426

List comprehension

bull Em Racket temos a forma sintaacutetica especial forlist

(define S (forlist ([x (in-range 1 11)])( 2 x)))

(define T (forlist ([x (in-range 1 11)]when (gt (sqr x) 8))

( 2 x)))

gt S(2 4 6 8 10 12 14 16 18 20)gt T(6 8 10 12 14 16 18 20)

526

List comprehension

bull Uma aproximaccedilatildeo da sintaxe do forlist eacute

(forlist (clause )body +)

clause = [id sequence-expr]| when boolean-expr| unless boolean-expr

626

List comprehension

bull Eacute possiacutevel fazer uma iteraccedilatildeo em paralelo em duas ou maissequecircncias

gt (forlist ([i (in-naturals)][x (list 3 5 2 4)])

(- x i))(3 4 0 1)

bull A funccedilatildeo in-naturals devolve uma sequecircncia com osnuacutemeros naturais

bull Como as sequecircncias tem tamanhos diferentes a iteraccedilatildeo eacuteinterrompida quando alguma sequecircncia termina

726

List comprehension

bull Existem muitas funccedilotildees preacute-definidas que satildeo uacuteteis nestecontexto

bull in-range

bull in-naturals

bull in-cycle

bull in-value

bull stop-before

bull stop-afer

bull Veja a referecircncia sobre sequecircncias

826

List comprehension

bull O Racket oferece ainda uma coleccedilatildeo de formas especiais parafazer iteraccedilatildeo em sequecircncias veja a referecircncia sobre iteraccedilotildees

926

Streams

Streams

bull Um stream eacute uma sequecircncia potencialmente infinita

bull Em geral os elementos do stream satildeo produzidos quando satildeonecessaacuterios neste caso um stream eacute uma sequecircncia preguiccedilosa

bull Streams tecircm vaacuterias utilidades mas vamos usaacute-losprincipalmente para definir ldquosequecircncias infinitasrdquo (como afunccedilatildeo in-naturals)

1026

Streams

bull As operaccedilotildees primitivas de streams satildeo semelhantes as daslistas

bull stream-cons

bull stream-first

bull stream-rest

1126

Streams

bull Outros funccedilotildees preacute-definidas

bull stream-ref

bull stream-gtlist

bull stream-fold

bull stream-map

bull stream-filter

bull Veja a referecircncia de streams

1226

Streams

bull Escrita de testes

bull Podemos utilizar as funccedilotildees preacute-definidas stream-ref estream-gtlist

bull Funccedilatildeo stream que cria um stream com os elementosespecificados (semelhante a funccedilatildeo list)

1326

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 5: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Sequecircncias

bull Exemplos

gt (sequence (list 5 2 10))tgt (sequence casa)tgt (sequence (in-range 10 20))tgt (sequence 12)f

326

List comprehension

List comprehension

bull Utilizaccedilatildeo da notaccedilatildeo de conjunto para definir uma lista

bull Combina map e filter

bull Exemplo

bull S = 2x | x isin 110

bull T = 2x | x isin 110 x2 gt 8

426

List comprehension

bull Em Racket temos a forma sintaacutetica especial forlist

(define S (forlist ([x (in-range 1 11)])( 2 x)))

(define T (forlist ([x (in-range 1 11)]when (gt (sqr x) 8))

( 2 x)))

gt S(2 4 6 8 10 12 14 16 18 20)gt T(6 8 10 12 14 16 18 20)

526

List comprehension

bull Uma aproximaccedilatildeo da sintaxe do forlist eacute

(forlist (clause )body +)

clause = [id sequence-expr]| when boolean-expr| unless boolean-expr

626

List comprehension

bull Eacute possiacutevel fazer uma iteraccedilatildeo em paralelo em duas ou maissequecircncias

gt (forlist ([i (in-naturals)][x (list 3 5 2 4)])

(- x i))(3 4 0 1)

bull A funccedilatildeo in-naturals devolve uma sequecircncia com osnuacutemeros naturais

bull Como as sequecircncias tem tamanhos diferentes a iteraccedilatildeo eacuteinterrompida quando alguma sequecircncia termina

726

List comprehension

bull Existem muitas funccedilotildees preacute-definidas que satildeo uacuteteis nestecontexto

bull in-range

bull in-naturals

bull in-cycle

bull in-value

bull stop-before

bull stop-afer

bull Veja a referecircncia sobre sequecircncias

826

List comprehension

bull O Racket oferece ainda uma coleccedilatildeo de formas especiais parafazer iteraccedilatildeo em sequecircncias veja a referecircncia sobre iteraccedilotildees

926

Streams

Streams

bull Um stream eacute uma sequecircncia potencialmente infinita

bull Em geral os elementos do stream satildeo produzidos quando satildeonecessaacuterios neste caso um stream eacute uma sequecircncia preguiccedilosa

bull Streams tecircm vaacuterias utilidades mas vamos usaacute-losprincipalmente para definir ldquosequecircncias infinitasrdquo (como afunccedilatildeo in-naturals)

1026

Streams

bull As operaccedilotildees primitivas de streams satildeo semelhantes as daslistas

bull stream-cons

bull stream-first

bull stream-rest

1126

Streams

bull Outros funccedilotildees preacute-definidas

bull stream-ref

bull stream-gtlist

bull stream-fold

bull stream-map

bull stream-filter

bull Veja a referecircncia de streams

1226

Streams

bull Escrita de testes

bull Podemos utilizar as funccedilotildees preacute-definidas stream-ref estream-gtlist

bull Funccedilatildeo stream que cria um stream com os elementosespecificados (semelhante a funccedilatildeo list)

1326

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 6: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

List comprehension

List comprehension

bull Utilizaccedilatildeo da notaccedilatildeo de conjunto para definir uma lista

bull Combina map e filter

bull Exemplo

bull S = 2x | x isin 110

bull T = 2x | x isin 110 x2 gt 8

426

List comprehension

bull Em Racket temos a forma sintaacutetica especial forlist

(define S (forlist ([x (in-range 1 11)])( 2 x)))

(define T (forlist ([x (in-range 1 11)]when (gt (sqr x) 8))

( 2 x)))

gt S(2 4 6 8 10 12 14 16 18 20)gt T(6 8 10 12 14 16 18 20)

526

List comprehension

bull Uma aproximaccedilatildeo da sintaxe do forlist eacute

(forlist (clause )body +)

clause = [id sequence-expr]| when boolean-expr| unless boolean-expr

626

List comprehension

bull Eacute possiacutevel fazer uma iteraccedilatildeo em paralelo em duas ou maissequecircncias

gt (forlist ([i (in-naturals)][x (list 3 5 2 4)])

(- x i))(3 4 0 1)

bull A funccedilatildeo in-naturals devolve uma sequecircncia com osnuacutemeros naturais

bull Como as sequecircncias tem tamanhos diferentes a iteraccedilatildeo eacuteinterrompida quando alguma sequecircncia termina

726

List comprehension

bull Existem muitas funccedilotildees preacute-definidas que satildeo uacuteteis nestecontexto

bull in-range

bull in-naturals

bull in-cycle

bull in-value

bull stop-before

bull stop-afer

bull Veja a referecircncia sobre sequecircncias

826

List comprehension

bull O Racket oferece ainda uma coleccedilatildeo de formas especiais parafazer iteraccedilatildeo em sequecircncias veja a referecircncia sobre iteraccedilotildees

926

Streams

Streams

bull Um stream eacute uma sequecircncia potencialmente infinita

bull Em geral os elementos do stream satildeo produzidos quando satildeonecessaacuterios neste caso um stream eacute uma sequecircncia preguiccedilosa

bull Streams tecircm vaacuterias utilidades mas vamos usaacute-losprincipalmente para definir ldquosequecircncias infinitasrdquo (como afunccedilatildeo in-naturals)

1026

Streams

bull As operaccedilotildees primitivas de streams satildeo semelhantes as daslistas

bull stream-cons

bull stream-first

bull stream-rest

1126

Streams

bull Outros funccedilotildees preacute-definidas

bull stream-ref

bull stream-gtlist

bull stream-fold

bull stream-map

bull stream-filter

bull Veja a referecircncia de streams

1226

Streams

bull Escrita de testes

bull Podemos utilizar as funccedilotildees preacute-definidas stream-ref estream-gtlist

bull Funccedilatildeo stream que cria um stream com os elementosespecificados (semelhante a funccedilatildeo list)

1326

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 7: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

List comprehension

bull Utilizaccedilatildeo da notaccedilatildeo de conjunto para definir uma lista

bull Combina map e filter

bull Exemplo

bull S = 2x | x isin 110

bull T = 2x | x isin 110 x2 gt 8

426

List comprehension

bull Em Racket temos a forma sintaacutetica especial forlist

(define S (forlist ([x (in-range 1 11)])( 2 x)))

(define T (forlist ([x (in-range 1 11)]when (gt (sqr x) 8))

( 2 x)))

gt S(2 4 6 8 10 12 14 16 18 20)gt T(6 8 10 12 14 16 18 20)

526

List comprehension

bull Uma aproximaccedilatildeo da sintaxe do forlist eacute

(forlist (clause )body +)

clause = [id sequence-expr]| when boolean-expr| unless boolean-expr

626

List comprehension

bull Eacute possiacutevel fazer uma iteraccedilatildeo em paralelo em duas ou maissequecircncias

gt (forlist ([i (in-naturals)][x (list 3 5 2 4)])

(- x i))(3 4 0 1)

bull A funccedilatildeo in-naturals devolve uma sequecircncia com osnuacutemeros naturais

bull Como as sequecircncias tem tamanhos diferentes a iteraccedilatildeo eacuteinterrompida quando alguma sequecircncia termina

726

List comprehension

bull Existem muitas funccedilotildees preacute-definidas que satildeo uacuteteis nestecontexto

bull in-range

bull in-naturals

bull in-cycle

bull in-value

bull stop-before

bull stop-afer

bull Veja a referecircncia sobre sequecircncias

826

List comprehension

bull O Racket oferece ainda uma coleccedilatildeo de formas especiais parafazer iteraccedilatildeo em sequecircncias veja a referecircncia sobre iteraccedilotildees

926

Streams

Streams

bull Um stream eacute uma sequecircncia potencialmente infinita

bull Em geral os elementos do stream satildeo produzidos quando satildeonecessaacuterios neste caso um stream eacute uma sequecircncia preguiccedilosa

bull Streams tecircm vaacuterias utilidades mas vamos usaacute-losprincipalmente para definir ldquosequecircncias infinitasrdquo (como afunccedilatildeo in-naturals)

1026

Streams

bull As operaccedilotildees primitivas de streams satildeo semelhantes as daslistas

bull stream-cons

bull stream-first

bull stream-rest

1126

Streams

bull Outros funccedilotildees preacute-definidas

bull stream-ref

bull stream-gtlist

bull stream-fold

bull stream-map

bull stream-filter

bull Veja a referecircncia de streams

1226

Streams

bull Escrita de testes

bull Podemos utilizar as funccedilotildees preacute-definidas stream-ref estream-gtlist

bull Funccedilatildeo stream que cria um stream com os elementosespecificados (semelhante a funccedilatildeo list)

1326

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 8: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

List comprehension

bull Em Racket temos a forma sintaacutetica especial forlist

(define S (forlist ([x (in-range 1 11)])( 2 x)))

(define T (forlist ([x (in-range 1 11)]when (gt (sqr x) 8))

( 2 x)))

gt S(2 4 6 8 10 12 14 16 18 20)gt T(6 8 10 12 14 16 18 20)

526

List comprehension

bull Uma aproximaccedilatildeo da sintaxe do forlist eacute

(forlist (clause )body +)

clause = [id sequence-expr]| when boolean-expr| unless boolean-expr

626

List comprehension

bull Eacute possiacutevel fazer uma iteraccedilatildeo em paralelo em duas ou maissequecircncias

gt (forlist ([i (in-naturals)][x (list 3 5 2 4)])

(- x i))(3 4 0 1)

bull A funccedilatildeo in-naturals devolve uma sequecircncia com osnuacutemeros naturais

bull Como as sequecircncias tem tamanhos diferentes a iteraccedilatildeo eacuteinterrompida quando alguma sequecircncia termina

726

List comprehension

bull Existem muitas funccedilotildees preacute-definidas que satildeo uacuteteis nestecontexto

bull in-range

bull in-naturals

bull in-cycle

bull in-value

bull stop-before

bull stop-afer

bull Veja a referecircncia sobre sequecircncias

826

List comprehension

bull O Racket oferece ainda uma coleccedilatildeo de formas especiais parafazer iteraccedilatildeo em sequecircncias veja a referecircncia sobre iteraccedilotildees

926

Streams

Streams

bull Um stream eacute uma sequecircncia potencialmente infinita

bull Em geral os elementos do stream satildeo produzidos quando satildeonecessaacuterios neste caso um stream eacute uma sequecircncia preguiccedilosa

bull Streams tecircm vaacuterias utilidades mas vamos usaacute-losprincipalmente para definir ldquosequecircncias infinitasrdquo (como afunccedilatildeo in-naturals)

1026

Streams

bull As operaccedilotildees primitivas de streams satildeo semelhantes as daslistas

bull stream-cons

bull stream-first

bull stream-rest

1126

Streams

bull Outros funccedilotildees preacute-definidas

bull stream-ref

bull stream-gtlist

bull stream-fold

bull stream-map

bull stream-filter

bull Veja a referecircncia de streams

1226

Streams

bull Escrita de testes

bull Podemos utilizar as funccedilotildees preacute-definidas stream-ref estream-gtlist

bull Funccedilatildeo stream que cria um stream com os elementosespecificados (semelhante a funccedilatildeo list)

1326

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 9: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

List comprehension

bull Uma aproximaccedilatildeo da sintaxe do forlist eacute

(forlist (clause )body +)

clause = [id sequence-expr]| when boolean-expr| unless boolean-expr

626

List comprehension

bull Eacute possiacutevel fazer uma iteraccedilatildeo em paralelo em duas ou maissequecircncias

gt (forlist ([i (in-naturals)][x (list 3 5 2 4)])

(- x i))(3 4 0 1)

bull A funccedilatildeo in-naturals devolve uma sequecircncia com osnuacutemeros naturais

bull Como as sequecircncias tem tamanhos diferentes a iteraccedilatildeo eacuteinterrompida quando alguma sequecircncia termina

726

List comprehension

bull Existem muitas funccedilotildees preacute-definidas que satildeo uacuteteis nestecontexto

bull in-range

bull in-naturals

bull in-cycle

bull in-value

bull stop-before

bull stop-afer

bull Veja a referecircncia sobre sequecircncias

826

List comprehension

bull O Racket oferece ainda uma coleccedilatildeo de formas especiais parafazer iteraccedilatildeo em sequecircncias veja a referecircncia sobre iteraccedilotildees

926

Streams

Streams

bull Um stream eacute uma sequecircncia potencialmente infinita

bull Em geral os elementos do stream satildeo produzidos quando satildeonecessaacuterios neste caso um stream eacute uma sequecircncia preguiccedilosa

bull Streams tecircm vaacuterias utilidades mas vamos usaacute-losprincipalmente para definir ldquosequecircncias infinitasrdquo (como afunccedilatildeo in-naturals)

1026

Streams

bull As operaccedilotildees primitivas de streams satildeo semelhantes as daslistas

bull stream-cons

bull stream-first

bull stream-rest

1126

Streams

bull Outros funccedilotildees preacute-definidas

bull stream-ref

bull stream-gtlist

bull stream-fold

bull stream-map

bull stream-filter

bull Veja a referecircncia de streams

1226

Streams

bull Escrita de testes

bull Podemos utilizar as funccedilotildees preacute-definidas stream-ref estream-gtlist

bull Funccedilatildeo stream que cria um stream com os elementosespecificados (semelhante a funccedilatildeo list)

1326

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 10: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

List comprehension

bull Eacute possiacutevel fazer uma iteraccedilatildeo em paralelo em duas ou maissequecircncias

gt (forlist ([i (in-naturals)][x (list 3 5 2 4)])

(- x i))(3 4 0 1)

bull A funccedilatildeo in-naturals devolve uma sequecircncia com osnuacutemeros naturais

bull Como as sequecircncias tem tamanhos diferentes a iteraccedilatildeo eacuteinterrompida quando alguma sequecircncia termina

726

List comprehension

bull Existem muitas funccedilotildees preacute-definidas que satildeo uacuteteis nestecontexto

bull in-range

bull in-naturals

bull in-cycle

bull in-value

bull stop-before

bull stop-afer

bull Veja a referecircncia sobre sequecircncias

826

List comprehension

bull O Racket oferece ainda uma coleccedilatildeo de formas especiais parafazer iteraccedilatildeo em sequecircncias veja a referecircncia sobre iteraccedilotildees

926

Streams

Streams

bull Um stream eacute uma sequecircncia potencialmente infinita

bull Em geral os elementos do stream satildeo produzidos quando satildeonecessaacuterios neste caso um stream eacute uma sequecircncia preguiccedilosa

bull Streams tecircm vaacuterias utilidades mas vamos usaacute-losprincipalmente para definir ldquosequecircncias infinitasrdquo (como afunccedilatildeo in-naturals)

1026

Streams

bull As operaccedilotildees primitivas de streams satildeo semelhantes as daslistas

bull stream-cons

bull stream-first

bull stream-rest

1126

Streams

bull Outros funccedilotildees preacute-definidas

bull stream-ref

bull stream-gtlist

bull stream-fold

bull stream-map

bull stream-filter

bull Veja a referecircncia de streams

1226

Streams

bull Escrita de testes

bull Podemos utilizar as funccedilotildees preacute-definidas stream-ref estream-gtlist

bull Funccedilatildeo stream que cria um stream com os elementosespecificados (semelhante a funccedilatildeo list)

1326

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 11: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

List comprehension

bull Existem muitas funccedilotildees preacute-definidas que satildeo uacuteteis nestecontexto

bull in-range

bull in-naturals

bull in-cycle

bull in-value

bull stop-before

bull stop-afer

bull Veja a referecircncia sobre sequecircncias

826

List comprehension

bull O Racket oferece ainda uma coleccedilatildeo de formas especiais parafazer iteraccedilatildeo em sequecircncias veja a referecircncia sobre iteraccedilotildees

926

Streams

Streams

bull Um stream eacute uma sequecircncia potencialmente infinita

bull Em geral os elementos do stream satildeo produzidos quando satildeonecessaacuterios neste caso um stream eacute uma sequecircncia preguiccedilosa

bull Streams tecircm vaacuterias utilidades mas vamos usaacute-losprincipalmente para definir ldquosequecircncias infinitasrdquo (como afunccedilatildeo in-naturals)

1026

Streams

bull As operaccedilotildees primitivas de streams satildeo semelhantes as daslistas

bull stream-cons

bull stream-first

bull stream-rest

1126

Streams

bull Outros funccedilotildees preacute-definidas

bull stream-ref

bull stream-gtlist

bull stream-fold

bull stream-map

bull stream-filter

bull Veja a referecircncia de streams

1226

Streams

bull Escrita de testes

bull Podemos utilizar as funccedilotildees preacute-definidas stream-ref estream-gtlist

bull Funccedilatildeo stream que cria um stream com os elementosespecificados (semelhante a funccedilatildeo list)

1326

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 12: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

List comprehension

bull O Racket oferece ainda uma coleccedilatildeo de formas especiais parafazer iteraccedilatildeo em sequecircncias veja a referecircncia sobre iteraccedilotildees

926

Streams

Streams

bull Um stream eacute uma sequecircncia potencialmente infinita

bull Em geral os elementos do stream satildeo produzidos quando satildeonecessaacuterios neste caso um stream eacute uma sequecircncia preguiccedilosa

bull Streams tecircm vaacuterias utilidades mas vamos usaacute-losprincipalmente para definir ldquosequecircncias infinitasrdquo (como afunccedilatildeo in-naturals)

1026

Streams

bull As operaccedilotildees primitivas de streams satildeo semelhantes as daslistas

bull stream-cons

bull stream-first

bull stream-rest

1126

Streams

bull Outros funccedilotildees preacute-definidas

bull stream-ref

bull stream-gtlist

bull stream-fold

bull stream-map

bull stream-filter

bull Veja a referecircncia de streams

1226

Streams

bull Escrita de testes

bull Podemos utilizar as funccedilotildees preacute-definidas stream-ref estream-gtlist

bull Funccedilatildeo stream que cria um stream com os elementosespecificados (semelhante a funccedilatildeo list)

1326

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 13: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Streams

Streams

bull Um stream eacute uma sequecircncia potencialmente infinita

bull Em geral os elementos do stream satildeo produzidos quando satildeonecessaacuterios neste caso um stream eacute uma sequecircncia preguiccedilosa

bull Streams tecircm vaacuterias utilidades mas vamos usaacute-losprincipalmente para definir ldquosequecircncias infinitasrdquo (como afunccedilatildeo in-naturals)

1026

Streams

bull As operaccedilotildees primitivas de streams satildeo semelhantes as daslistas

bull stream-cons

bull stream-first

bull stream-rest

1126

Streams

bull Outros funccedilotildees preacute-definidas

bull stream-ref

bull stream-gtlist

bull stream-fold

bull stream-map

bull stream-filter

bull Veja a referecircncia de streams

1226

Streams

bull Escrita de testes

bull Podemos utilizar as funccedilotildees preacute-definidas stream-ref estream-gtlist

bull Funccedilatildeo stream que cria um stream com os elementosespecificados (semelhante a funccedilatildeo list)

1326

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 14: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Streams

bull Um stream eacute uma sequecircncia potencialmente infinita

bull Em geral os elementos do stream satildeo produzidos quando satildeonecessaacuterios neste caso um stream eacute uma sequecircncia preguiccedilosa

bull Streams tecircm vaacuterias utilidades mas vamos usaacute-losprincipalmente para definir ldquosequecircncias infinitasrdquo (como afunccedilatildeo in-naturals)

1026

Streams

bull As operaccedilotildees primitivas de streams satildeo semelhantes as daslistas

bull stream-cons

bull stream-first

bull stream-rest

1126

Streams

bull Outros funccedilotildees preacute-definidas

bull stream-ref

bull stream-gtlist

bull stream-fold

bull stream-map

bull stream-filter

bull Veja a referecircncia de streams

1226

Streams

bull Escrita de testes

bull Podemos utilizar as funccedilotildees preacute-definidas stream-ref estream-gtlist

bull Funccedilatildeo stream que cria um stream com os elementosespecificados (semelhante a funccedilatildeo list)

1326

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 15: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Streams

bull As operaccedilotildees primitivas de streams satildeo semelhantes as daslistas

bull stream-cons

bull stream-first

bull stream-rest

1126

Streams

bull Outros funccedilotildees preacute-definidas

bull stream-ref

bull stream-gtlist

bull stream-fold

bull stream-map

bull stream-filter

bull Veja a referecircncia de streams

1226

Streams

bull Escrita de testes

bull Podemos utilizar as funccedilotildees preacute-definidas stream-ref estream-gtlist

bull Funccedilatildeo stream que cria um stream com os elementosespecificados (semelhante a funccedilatildeo list)

1326

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 16: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Streams

bull Outros funccedilotildees preacute-definidas

bull stream-ref

bull stream-gtlist

bull stream-fold

bull stream-map

bull stream-filter

bull Veja a referecircncia de streams

1226

Streams

bull Escrita de testes

bull Podemos utilizar as funccedilotildees preacute-definidas stream-ref estream-gtlist

bull Funccedilatildeo stream que cria um stream com os elementosespecificados (semelhante a funccedilatildeo list)

1326

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 17: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Streams

bull Escrita de testes

bull Podemos utilizar as funccedilotildees preacute-definidas stream-ref estream-gtlist

bull Funccedilatildeo stream que cria um stream com os elementosespecificados (semelhante a funccedilatildeo list)

1326

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 18: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Exemplo 81

Defina uma funccedilatildeo que crie um stream de nuacutemeros inteiros a partirde um valor inicial n

1426

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 19: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Exemplo 82

Defina uma funccedilatildeo que crie um stream com os n primeiroselementos de um outro stream (Semelhante a funccedilatildeo take)

1526

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 20: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Exemplo 83

Defina uma funccedilatildeo que receba dois streams como paracircmetro e crieum stream em que cada elemento eacute a soma dos dois elementos namesma posiccedilatildeo dos streams de entrada

1626

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 21: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Streams impliacutecitos

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 22: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Streams impliacutecitos

gt (define uns (stream-cons 1 uns))gt (stream-gtlist (stream-take uns 10))(1 1 1 1 1 1 1 1 1 1)

gt (define naturais (stream-cons0(stream-soma naturais uns)))

gt (stream-gtlist (stream-take naturais 10))(0 1 2 3 4 5 6 7 8 9)

1726

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 23: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Streams impliacutecitos

gt (define fibs (stream-cons0(stream-cons1(stream-soma (stream-rest fibs)

fibs))))gt (stream-gtlist (stream-take fibs 10))(0 1 1 2 3 5 8 13 21 34)

1826

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 24: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Promessas

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 25: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Promessas

bull Streams satildeo criados utilizando as primitivas delay e force

1926

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 26: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Promessas

bull delay cria uma promessa de avaliar uma expressatildeo

gt (define p (delay (+ 4 5)))gt pltpromisepgt

bull (stream-cons ltagt ltbgt) eacute uma forma especial equivalente a

(cons ltagt (delay ltbgt))

2026

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 27: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Promessas

bull force faz com que uma promessa seja avaliada se a promessanatildeo foi forccedilada antes o resultado eacute armazenado na promessade maneira que quando force for utilizado novamente apromessa produza o mesmo valor

gt (force p)9gt pltpromise9gt

2126

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 28: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Implementaccedilatildeo

bull Uma implementaccedilatildeo simples seria fazer a expressatildeo (delayltexprgt) ser equivalente a (λ () ltexprgt) e (force p)simplesmente executaria (p)

bull Mas neste caso o resultado da promessa deve ser calculado acada chamada

bull Para armazenar o resultado da promessa vamos usar variaacuteveis

2226

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 29: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Implementaccedilatildeo

bull Neste caso (delay ltexprgt) eacute equivalente a (memoriza (λ() ltexprgt))

(define (memoriza proc)(let ([was-run f]

[result (void)])(lambda ()

(if (not was-run)(begin

(set result (proc))(set was-run t)result)

result))))

2326

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 30: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Racket lazy

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 31: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Racket lazy

bull No passado os streams natildeo estavam bem integrados com alinguagem Racket

bull A linguagem lazy melhorou esta integraccedilatildeo

2426

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 32: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Racket lazy

lang lazy

(define (naturais n)(cons n

(naturais (add1 n))))

gt (naturais 10)(10 ltpromisegt)gt (take 6 (naturais 10))(10 ltpromisellectslazylazyrkt67243gt)gt ( (take 6 (naturais 10)))(10 11 12 13 14 15 16)

2526

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 33: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Referecircncias

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias
Page 34: Sequências e streams - malbarbo...Sequências e streams MarcoALBarbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Referecircncias

bull Seccedilatildeo 35 (351 e 352) do livro SICP

bull Seccedilatildeo 414 e 218 da Referecircncia Racket

bull Referecircncia da linguagem lazy

2626

  • Sequecircncias
  • List comprehension
  • Streams
  • Streams impliacutecitos
  • Promessas
  • Racket lazy
  • Referecircncias