Código feito na linguagem scheme
Por: Thiago Felipe • 21/4/2016 • Ensaio • 2.758 Palavras (12 Páginas) • 425 Visualizações
;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)
...