sequências e streams - malbarbo...sequências e streams marcoalbarbosa malbarbo.pro.br departamento...
TRANSCRIPT
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-