Ragnarok
Folding Member
Esse é o típico problema que alguém que saiba, por exemplo, C ou C++ detesta em Scheme, que é não dar para usar ciclos
Scheme tem ciclos.
Esse é o típico problema que alguém que saiba, por exemplo, C ou C++ detesta em Scheme, que é não dar para usar ciclos
Scheme tem ciclos.
Se tem já não me recordo, mas pelo menos não podes usar um ciclo for, que nesta situação daria bastante jeito. Era a isso que me estava a referir Quando comecei com Scheme também me enervava bastante não os poder usar.
(define incrementa
(lambda (l)
(if (null? (cdr l))
(cons (+ (car l) 1) '())
(incrementa (cdr l)))))
A maneira mais simples de resolver isso é esta:
- Se não houver elementos, devolve null;
- Se houver cria uma lista com o primeiro elemento incrementado e no cdr pões essa função chamada recursivamente.
(define incrementa
(lambda (l)
(if (null? l)
'()
(cons (add1 (car l)) (incrementa (cdr l)))
(define incrementa
(lambda (l)
(if (null? l)
'()
(cons (append (+ 1 (car l))) (incrementa (cdr l))))))
(define fib
(lambda (n)
(cond
((= n 1) 0)
((= n 2) 1)
(else (+ (fib (- n 1)) (fib (- n 2)))))))
(define (fib n n_menos_um n_menos_dois)
se n=1 devolve n_menos_um
senão (fib (- n 1) n_menos_dois (+ n_menos_um n_menos_dois))
Se estiver errado corrige-me, é que nunca ouvi falar no termo recursão final.
Tenta procurar um "livro" que se chama "SICP" (Structure and Implementation of Computer Programs). Foi o que me foi recomendado e digo: só depois de aprender Scheme é que disse "Eu COMECEI a aprender o que é programar!"
Para programar ele usa o Dr. Scheme: http://www.drscheme.org/
Quanto ao livro, ele usa o e-book do professor da cadeira (Fernando Nunes Ferreira, FEUP). Possivelmente poderá usar outros apontamentos que desconheço.
Se estás no IST, usa a bibliografia recomendada que é MUITO boa.