Scheme

Para quem já trabalhou em scheme que tipo de programas é que se pode fazer???
Eu ainda sou iniciante e até agora a única coisa que vi foi definir funções e mais funções...eu sei que é por aqui que se começa, mas depois dá para fazer coisas mais evoluídas não dá???
 
Estive a tentar definir uma função em que inserimos uma lista e ela incrementa uma unidade essa lista, ou seja, dá-se a lista (2 3 4) e a função devolve (3 4 5). O que eu fiz foi:

Código:
(define incrementa
  (lambda (l)
    (if (null? (cdr l))
        (cons (+ (car l) 1) '())
        (incrementa (cdr l)))))

O problema é que esta função só devolve o último elemento da lista (incrementado de uma unidade), ou seja, se eu no fim fizer (incrementa '(2 3 4)), a função devolve o seguinte: (5).

Agradeço desde já a quem tiver uma sugestão para eu resolver este problema, e já agora desculpem estar constantemente a colocar dúvidas.
 
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.
 
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.

O 1º passo percebi e fiz:

Código:
(define incrementa
  (lambda (l)
    (if (null? l)
        '()
Agora o segundo é que não...podias por a linha de código para eu ver como fica...e desde já obrigado, já vi que percebes mesmo disto :D
 
Muito obrigado mais uma vez Mr. Brightside...o programa ficou:

Código:
(define incrementa
  (lambda (l)
    (if (null? l)
        '()
        (cons (append (+ 1 (car l))) (incrementa (cdr l))))))
Em vez de add1 (que o programa dava erro e dizia que não tava definido) usei a função pré-definida append e agora o problema ficou resolvido.
 
o add1 seria um procedimento de somar mais um a um número, tipo

Código:
(define (add1 x)
          (+ x 1))

edit: e em vez do append experimenta usar o construtor cons.
 
Última edição:
EStive a fazer um exercício que consiste em criar um função fib que nos devolva o n-ésimo termo da série de Fibonacci, ou seja, se fizermos (fib 4) a resposta é 2.
O termo n desta série (fib n) obtém-se pela soma dos termos anteriores [fib (n-1)+fib (n_2)], o que dá: 0,1,1,2,3,5,8,13,21,...
Eu tinha de definir esta função em recursão normal e em recursão final.
Eu já consegui definir a função em recursão normal que fica:

Código:
(define fib
  (lambda (n)
    (cond
      ((= n 1) 0)
      ((= n 2) 1)
      (else (+ (fib (- n 1)) (fib (- n 2)))))))

Agora gostava que alguém me desse umas dicas para a definir em recursão final...já agora o exercício dá uma dica: diz para usar dois parâmetros adicionais para passar á frente os dois últimos termos da série.

Desde já obrigado a quem me ajudar.
 
Portanto, se eu estou a perceber o que dizes, queres fazer isso de modo iterativo, ou seja, a tua declaração de função seria (define (fib n n_menos_um n_menos_dois)

Se estiver errado corrige-me, é que nunca ouvi falar no termo recursão final.


EDIT: Não me expliquei bem, em pseudo-código seria:

Código:
(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))
 
Última edição:
O scheme a princípio parece meio esquisito, falo por experiência própria. Mas para aprender acho o scheme muito, mas muito bom. Aliás, é uma derivação do Lisp :msmiley1:

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!"
 
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!"

O nome do livro não será antes "Structure and Interpretation of Computer Programs", é que eu pesquisei o que disseste e encontrei um livro em .pdf que em vez de dizer o título que disseste dizia este e era sobre scheme.
De qualquer forma obrigado pela dica, porque senão tivesse pesquisado o que disseste não tinha encontrado este livro.
 
Olá pessoal, comecei hoje as aulas no IST e tambem comecei a estudar Scheme, por isso queria perguntar ao Ronnie, que programa ele esta a usar, que livros, tuturiais e coisas dessas que ele possa estar a usar para ter e resolver esses problemas ...
 
Se estás no IST, usa a bibliografia recomendada que é MUITO boa. ;)

Já tive a ver e é aquele livro que tinhas dito em posts anteriores, vou tentar arranjar ... Andas(-te) em que IST?

EDIT:

Já agora, o meu professor disse que iamos trabalhar com a versao 3.7.1... esse programa tem essa versao ?
 
Última edição:
Back
Topo