Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior | Próxima revisão Ambos lados da revisão seguinte | ||
temas:programacao:fp [2015/10/11 20:17] phil [3) Recursividade é sua jeito de navegar dentro as estruturas] |
temas:programacao:fp [2015/10/11 20:39] phil [4) Funções são cidadãos do primeiro classe] |
||
---|---|---|---|
Linha 161: | Linha 161: | ||
==== 4) Funções são cidadãos do primeiro classe ==== | ==== 4) Funções são cidadãos do primeiro classe ==== | ||
- | ... | + | (define (mult2 x) (* 2 x)) |
+ | |||
+ | Podemos passar elas como argumentos : | ||
+ | |||
+ | (define (mymap f xs) | ||
+ | (if (empty? xs) '() | ||
+ | (cons (f (car xs)) (mymap f (cdr xs))))) | ||
+ | |||
+ | (mymap mult2 '(1 2 3 4 5)) | ||
+ | |||
+ | Podemos produzir elas utilizando " | ||
+ | |||
+ | (mymap (curry * 2) '(1 2 3 4 5)) | ||
+ | |||
+ | Como nos queremos passar muitos pequenos funções como argumentos para outros funções, temos a capacidade definir funções anônimos com a " | ||
+ | |||
+ | (mymap (lambda (x) (* x 3)) '(1 2 3 4 5)) | ||
+ | |||
+ | A biblioteca padrão contem varias funções pra tratar listas com outras funções | ||
+ | |||
+ | (map (curry * 4) '(1 2 3 4 5)) | ||
+ | |||
+ | (filter (lambda (x) (< x 5)) (range 10)) | ||
+ | |||
+ | (foldr (lambda (a b) (* a b)) 1 '(1 2 3 4 5)) | ||
+ | |||
+ | === Exerciso 5.=== | ||
+ | |||
+ | Escrever o função que somar as números par dentro uma lista utilizando estas funções do biblioteca padrão. | ||
+ | |||
+ | Escrever sua própria versão de filter | ||
===== E agora, vamos brincar ===== | ===== E agora, vamos brincar ===== |