TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Código feito na linguagem scheme

Por:   •  21/4/2016  •  Ensaio  •  2.758 Palavras (12 Páginas)  •  388 Visualizações

Página 1 de 12

;Alunos: Arthur Abreu de Andrade

; Thiago Felipe dos Santos

;essa função recebe 3 listas e uma variável a primeira ta armazenado a lista que irá se transformar em uma operação binária a segunda armazena os valores a 3 e a 4 é necessaria em outra função

(define fazerop (lambda (AL L Aux x) (cond

( (equal? (car AL) '+) (quaseprep (cons (+ (cadr AL) (caddr AL)) (cdddr L)) Aux x) )

( (equal? (car AL) '-) (quaseprep (cons (- (cadr AL) (caddr AL)) (cdddr L)) Aux) )

( (equal? (car AL) '*) (quaseprep (cons (* (cadr AL) (caddr AL)) (cdddr L)) Aux x) )

( (equal?(car AL) '/) (quaseprep (cons (/ (cadr AL) (caddr AL)) (cdddr L)) Aux x) )

(null? (cdr AL) (display (car L))))))

;função que manda os valores da lista Aux para a lista L e no final chama a função (prepara)

(define quaseprep (lambda (L Aux x) (if(null? Aux) (prepara L Aux x) (quaseprep (cons (car Aux) L) (cdr Aux) x))))

;função para contar quantos elementos tem em uma Lista)

(define contar (lambda (AL) (if (null? AL) 0 (+ 1 (contar (cdr AL)))) ))

;função que busca 2 numeros seguidos que contenham um símbolo depois do segundo para atribuir a operação do símbolo a estes números. Se não tiver algum número antes desses o mesmo vai pra lista aux.

(define prepara

(lambda (L Aux x)

(if (> (contar L) 2) (if (equal? (testasimbolo (cddr L)) #t ) (fazerop (cons (caddr L) (cons (car L) (cons (cadr L) '())) ) L Aux x)

(if(equal? (testasimbolo (cddr L)) #f ) (prepara (cdr L) (cons (car L) Aux) x) (display L) )

)

(if(equal? x '@) (Display (car L)))

)

)

)

;matriz da polonesa reversa

(define matpol '((4 1 1 1 1 1 5);linha do $

(2 2 2 1 1 1 2);linha do +

(2 2 2 1 1 1 2) ;linha do -

(2 2 2 2 2 1 2) ;linha do *

(2 2 2 2 2 1 2);linha do /

(5 1 1 1 1 1 3)));linha do <

(define el (lambda (X M) (if (= X 1) (car M) (el (- X 1) (cdr M)))))

(define transfpolaux (lambda (Cl Ex) (cond

((equal? Ex '$) (el 1 Cl)); busca a coluna 1 que é do $

((equal? Ex '+) (el 2 Cl));busca a coluna 2 que é do +

((equal? Ex '-) (el 3 Cl));busca a coluna 3 que é do -

((equal? Ex '*) (el 4 Cl));busca a coluna 4 que é do *

((equal? Ex '/) (el 5 Cl));busca a coluna 5 que é do /

((equal? Ex '<) (el 6 Cl));busca a coluna 6 que é do <

((equal? Ex '>) (el 7 Cl)))));busca a coluna 7 que é do >

(define transfpol (lambda (Pi Ex) (cond

((equal? Pi '$) (transfpolaux(el 1 matpol) Ex)) ;busca a linha 1 que é do $

((equal? Pi '+) (transfpolaux (el 2 matpol) Ex));busca a linha 2 que é do +

((equal? Pi '-) (transfpolaux (el 3 matpol) Ex));busca a linha 3 que é do -

((equal? Pi '*) (transfpolaux (el 4 matpol) Ex));busca a linha 4 que é do *

((equal? Pi '/) (transfpolaux (el 5 matpol) Ex));busca a linha 5 que é do /

((equal? Pi '<) (transfpolaux(el 6 matpol) Ex)))));busca a linha 6 que é do <

; função que recebe uma lista e verifica se o primeiro valor é um operador

(define testasimbolo

(lambda (E) (cond

( (equal? (car E) '+) #t )

( (equal? (car E) '-) #t )

( (equal? (car E) '*) #t )

( (equal?(car E) '/) #t )

( (equal? (car E) '$) #t )

( (equal? (car E) '<) #t )

( (equal? (car E) '>) #t )

((symbol? (car E) ) #f)

((number? (car E)) #f)

((list? E) #f)

((null? E) (display L))

)

))

;a função busca o número que mostra a linha e a coluna dos símbolos de operação

(define polonesa

(lambda (E P C A x)

...

Baixar como (para membros premium)  txt (8.2 Kb)   pdf (77 Kb)   docx (13 Kb)  
Continuar por mais 11 páginas »
Disponível apenas no TrabalhosGratuitos.com