Código feito na linguagem scheme
Por: Evandro.2016 • 18/1/2018 • 2.761 Palavras (12 Páginas) • 371 Visualizações
...
((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)
(if (equal? #t (testasimbolo E)) (situacao (transfpol (car P) (car E)) C P E A x)
(polonesa (cdr E) P (situacao2 C (car E)) A x)
)
)
)
;função que coloca o cifrão no final da expressao, usada no processo da polonesa reversa
(define cifrao (lambda (E) (if (null? E) (cons ’$ ’()) (cons (car E) (cifrao (cdr E))))))
;função que ira resolver uma expressão por meio da chama da polonesa
;após o resultado da expressão, volta para avalia sem o elemento anteriormente executado
(define programa
(lambda (E P C A x)
; A = lista de atribuições
(polonesa (cifrao (car E)) P C A x)
(newline)
(avalia (cdr E) A)
)
)
;função auxiliar para função situação
(define situacao2 (lambda (L v) (if (null? L) (cons v ’()) (cons (car L) (situacao2 (cdr L) v)))))
;função que determina as ações da polonesa de acordo com o numero adquirido na matriz
(define situacao (lambda (v C P E A x)
(cond
((= v 1) (polonesa (cdr E) (cons (car E) P) C A x) )
((= v 2) (polonesa E (cdr P) (situacao2 C (car P)) A x) )
((= v 3) (polonesa (cdr E) (cdr P) C A x) )
((= v 4) (prepara (substitui A C) ’() x))
)
)
)
;essa função essa função compara uma letra com a lista na forma polonesa e troca
(define sub (lambda (Ax Ca) (if (null? Ca) ’() (if (equal? (car Ax) (car Ca) )
(cons (cadr Ax) (sub Ax (cdr Ca)))
(cons (car Ca) (sub Ax (cdr Ca)))))))
;função essa função manda a letra para a função acima poder comparar
(define substitui (lambda (Ax Ca) (if (null? Ax) Ca (substitui (cdr Ax) (sub (car Ax) Ca) ) )))
; função para determinar se é uma atribuição ou expressão
; verifica se o segundo elemento de um parametro da função princiapl é =
(define verifica
(lambda (L) (if (equal? (cadr L) ’= ) #t #f)
))
;função que faz as atribuições das variaveis
; cria uma lista A de pares ordenados com as variaveis e seus valores;
;Ex: B = 3 C = 5
;(lista) A = ( (b 3) (c 5) )
(define atribui
(lambda(L A v)
(cons (cons (caar L) (cons (caddr (car L)) ’()) ) A)
(cond ((equal? v ’@) (display (cons (caar L) (cons (caddr (car L)) ’()) )) (newline)))
(avalia (cdr L ) (cons (cons (caar L) (cons (caddr (car L)) ’()) ) A))
)
)
;essa função busca a letra que é igual a uma armazenada em uma lista de lista (A)
; Ex: A=((a 5)(b 7) (c 9)) v =’c
(define busca(lambda (A v) (if (equal? (caar A) v) (car(cdr(car
...