Forum Pplware
Programacao em Scheme - Versão de Impressão

+- Forum Pplware (http://forum.pplware.com)
+-- Fórum: Mais Tech (/forumdisplay.php?fid=11)
+--- Fórum: Programação e Web (/forumdisplay.php?fid=16)
+--- Tópico: Programacao em Scheme (/showthread.php?tid=3573)

Páginas: 1 2


Programacao em Scheme - Paco90 - 20-10-2009 16:48

Ola,


Sera que alguem me poderia ajudar e mostrar-me (com uma explicacao se possivel :confusedSmile como posso obter uma nova versao do procedimento abaixo, mas gerando um processo iterativo em vez de recursivo. Obrigado Smile


Código:
(define (soma x)
   (if (= x 0)
       x
       (+ (transforma x) (soma (- x 1)))))



RE: Programacao em Scheme - Ferreira - 20-10-2009 16:52

Precisas de uma função auxiliar que tenha um argumento adicional que guarde o resultado actual.

Depois mais chamando essa função actualizando o resultado a cada chamada.


RE: Programacao em Scheme - Paco90 - 20-10-2009 17:01

Obrigado pela resposta.

Sera que nao me poderias escrever 1 ou 2 linhas, para eu tentar perceber. Rolleyes

a ver se consigo fazer depois de engrenar

obg


RE: Programacao em Scheme - Ferreira - 20-10-2009 17:03

Algo do tipo:

Código:
(if (= x 0)
    resultado
    (soma (- x 1) (+ resultado (transforma x))))



RE: Programacao em Scheme - Paco90 - 20-10-2009 17:26

Código:
(define soma2 (lambda (x) (resultado)))
(if (= x 0)
    resultado
    (soma (- x 1) (+ resultado (transforma x))))

assim esta correcto?


este e o prog completo:


Código:
(define (transforma x)
  (if (even? x) (* x x)
        (* 3 x) ))

(define (soma x)
   (if (= x 0)
       x
       (+ (transforma x) (soma (- x 1)))))


(define soma2 (lambda (x) (resultado)))
(if (= x 0)
    resultado
    (soma2 (- x 1) (+ resultado (transforma x))))





esta.me a dar um erro (reference to undefined identifier: x) no x do segundo if.
Podes.me ajudar Sad. Estou a tentar, mas estou um pouco confuso.


RE: Programacao em Scheme - Ferreira - 20-10-2009 17:28

Para que é esse lambda? Porque é que não fazes como tens feito na outra função?


RE: Programacao em Scheme - certaindead - 24-10-2009 18:09

Código:
(define (transforma n)
  (if (even? n) (* n n)
      (* 3 n)))
(define (soma n)
  (if (= n 1)
      3
      (+ (transforma n) (soma (- n 1)))))
(define (soma2 n)
(if (= n 0)
    0
    (+ (soma (- n 1)) (+ 0 (transforma n)))))
Podem-me dizer se este código está bem feito? Os valores de soma e soma2 saem iguais, mas é para confirmar a sintaxe. Obrigado.


RE: Programacao em Scheme - Ferreira - 24-10-2009 18:27

Se corre é porque a sintaxe está correcta.


RE: Programacao em Scheme - Fcena - 01-11-2009 00:19

basicamente, o que vocês querem é este codigo Big Grin

Código:
(define (transforma n)
      (if (odd? n)
          (* 3 n)
          (expt n 2)))

(define (soma n)
    (cond ( (or (not (integer? n))
                (<= n 0))
            (error "inserir n inteiro positivo"))
          ( (= n 1) (transforma n))
          (else (+ ((soma (- n 1)) (transforma n))))))

(define (soma-aux n soma-ac)
    (cond ( (or (not (integer? n))
                (<= n 0))
            (error "inserir n inteiro positivo"))
          ( (= n 1) (+ (transforma n) soma-ac))
          (else (soma-aux (- n 1) (+ soma-ac (transforma n))))))
(define (soma n) (soma-aux n 0))

Isto foi o trabalho de casa de Fp ... LEIC alameda Mr Green

Cumprimentos


RE: Programacao em Scheme - Ferreira - 01-11-2009 00:51

Excelente curso, esse. Tongue