Advertisement
Drowze

Untitled

May 26th, 2015
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 7.76 KB | None | 0 0
  1. ;Função para verificar se duas listas DE ATOMOS sao iguais
  2. (defun LstAtmIguais (x y)
  3.     (cond ((atom x) ;quando X eh atomo
  4.               (cond ((atom y) 't) ;se Y atomo retorna true
  5.                     ('t 'nil) ;senao retorna false
  6.               )
  7.           )
  8.           ((atom y) 'nil) ;deixa de ser listas entao retorna false
  9.           ((equal (car x) (car y)) (LstAtmIguais (cdr x) (cdr y))) ;se os dois primeiros sao iguais verifica se o resto eh listas iguais
  10.           ('t 'nil); se chegar aqui retorna nil
  11.     )
  12. )
  13.  
  14. ;Função para verificar se duas expressoes simbolicas sao iguais
  15. (defun ExpSmbIguais (x y)
  16.     (cond ((atom x) ;quando X eh atomo
  17.               (cond ((atom y) (equal x y)) ;quando y é atomo verifica se iguais
  18.                     ('t 'nil) ;chegando aqui retorna nil
  19.               )
  20.           )
  21.           ((atom y) 'nil) ;verifica se Y é atomo se sim retorna nil
  22.           ((ExpSmbIguais (car x) (car y)) (ExpSmbIguais (cdr x) (cdr y))) ;se os primeiros forem iguais ele testa se o resto sao iguais
  23.           ('t 'nil) ;se chegar aqui retorna nil
  24.     )
  25. )
  26.  
  27. ;Função para verificar se duas listas QUAISQUER sao iguais
  28. (defun ListasIguais (x y)
  29.     (cond
  30.         ((atom x) ;quando x eh atomo
  31.             (cond
  32.                 ((atom y) 't) ;se Y eh atomo retorna true
  33.                 ('t 'nil) ;senao retorna false
  34.             )
  35.          
  36.           ((atom y) 'nil) ;se Y atomo retorna NIL
  37.           ((ExpSmbIguais (car x) (car y)) (ListasIguais (cdr x) (cdr y))); se forem iguais ele vai verificar a lista
  38.           ('t 'nil);se chegar aqui retorna nil
  39.          )
  40.     )
  41. )
  42. ;----------------------------------------------------------------------------------------------------------------------------
  43. ;Exercicios Propostos
  44. ;1- Escreva um predicado que verifica se um numero inteiro é negativo
  45. (defun negativo (x)
  46.     (cond ((equal x 0) 'nil) ;se X for zero retorna nil
  47.           ('t (negAux x x)) ;senao ele chama negAux passando X
  48.     )
  49. )
  50.  
  51. (defun negAux (A D)
  52.     (cond ((equal A 0) 't) ;se A for zero ele retorna true
  53.           ((equal D 0) 'nil) ;se D for zero ele retorna nil
  54.           ('t (negAux (1+ A) (1- D))) ;caso D diferente de 0, recursao aumentando A e diminuindo D
  55.     )
  56. )
  57.  
  58. ;2- Escreva as funções soma e subt que realizam, respectivamente, as operações aritméticas de adição e de subtração.
  59. ;   Considere que o domínio de anbas as funções é o conjunto dos pares ordenados de números inteiros,
  60. ;   e que o contradomínio de ambas é o conjunto dos números inteiros.
  61.  
  62. (defun soma (X Y)
  63.     (cond
  64.         ((equal y 0) x) ;se Y for 0 retorna X
  65.         ((negativo Y) (soma (1- X) (1+ Y))) ;se y diferente de 0, verifica se Y é negativo, se sim faz recursao diminuindo X e aumentando Y
  66.         ('t (soma (1+ X) (1- Y))) ;senao, y é positivo entao, faz recursao aumentando X e diminuindo Y
  67.     )
  68. )
  69.  
  70. (defun subtracao (X Y)
  71.     (cond
  72.         ((equal y 0) x) ;se Y for 0 retorna X
  73.         ((negativo Y) (subtracao (1+ X) (1+ Y)));se y diferente de 0, verifica se Y é negativo, se sim faz recursao aumentando X e aumentando Y
  74.         ('t (subtracao (1- X) (1- Y))) ;senao, y é positivo entao, faz recursao diminuindo X e diminuindo Y
  75.     )
  76. )
  77.  
  78. ;3- Escreva os predicados NE, GT, GE, LT, LE (respectivamente, diferente, maior, maior ou
  79. ;   igual, menor, e menor ou igual). Considere que o domínio de todos os predicados é o
  80. ;   conjunto dos números inteiros.
  81.  
  82. (defun diferentes (X Y)
  83.     (cond
  84.         ((equal X Y) 'nil) ;se X for igual a Y retorna NIL
  85.         ('t 't) ;senao retorna true
  86.     )
  87. )
  88.  
  89. (defun maior (X Y)
  90.     (cond
  91.         ((equal x 0) ;se X for zero entra na condicao
  92.             (cond
  93.                 ((negativo y) x) ;se Y for negativo retorna X
  94.                 ('t y) ;senao retorna Y
  95.             )
  96.         )
  97.         ((equal y 0) ;se Y for zero entra na condicao
  98.             (cond
  99.                 ((negativo x) y) ;se X for negativo retorna Y
  100.                 ('t x) ;senao retorna X
  101.             )
  102.         )
  103.         ((negativo x) ;se X for negativo entra na condicao
  104.             (cond
  105.                 ((negativo y) (1- (maior (1+ x)(1+ y)))) ;se Y negativo, faz recursao aumentando X e aumentando Y
  106.                 ('t y) ;se Y é positivo e X negativo retorna Y
  107.             )
  108.         )
  109.         ((negativo y) x) ;quando y é negativo retona x
  110.         ('t (1+ (maior (1- x)(1- y)))) ;caso X e Y positivo, chama recursão diminuindo X e diminuindo Y
  111.     )
  112. )
  113.  
  114. (defun maiorigual (X Y)
  115.     (cond
  116.         ((equal X Y) 't) ;se X e Y forem iguais retorna TRUE
  117.         ('t (maior X Y)) ;senao chama funcao maior
  118.     )
  119. )
  120.  
  121. (defun menor (X Y)
  122.     (cond
  123.         ((equal x 0) ;se X for zero entra na condicao
  124.             (cond
  125.                 ((negativo y) y) ;se Y for negativo retorna Y
  126.                 ('t x) ;senao retorna X
  127.             )
  128.         )
  129.         ((equal y 0) ;se Y for zero entra na condicao
  130.             (cond
  131.                 ((negativo x) x) ;se X for negativo retorna X
  132.                 ('t y) ;senao retorna Y
  133.             )
  134.         )
  135.         ((negativo x) ;se X for negativo entra na condicao
  136.             (cond
  137.                 ((negativo y) (1- (menor (1+ x)(1+ y)))) ;se Y negativo, faz recursao aumentando X e aumentando Y
  138.                 ('t x) ;se Y é positivo e X negativo retorna X
  139.             )
  140.         )
  141.         ((negativo y) y);quando y é negativo retona y
  142.         ('t (1+ (menor (1- x)(1- y)))) ;caso X e Y positivo, chama recursão diminuindo X e diminuindo Y
  143.     )
  144.  
  145. )
  146.  
  147. (defun menorigual (X Y)
  148.     (cond
  149.         ((equal X Y) 't) ;se X e Y forem iguais retorna TRUE
  150.         ('t (menor X Y)) ;senao chama funcao menor
  151.     )
  152. )
  153.  
  154. ;4- Escreva a função abs que calcula valor absoluto ou em módulo. Considere que o domínio
  155. ;   dessa função é o conjunto dos números inteiros, e que o contradomínio dela é o conjunto
  156. ;   dos números naturais.
  157.  
  158. (defun modulo (X)
  159.     (cond
  160.         ((negativo X) (subtracao 0 x)) ;se X for negativo, faz subtracao com zero, pois inverte o sinal
  161.         ('t X) ;senao retorna X
  162.     )
  163. )
  164.  
  165. ;5- Escreva as funções mult, divi e rest que realizam, respectivamente, as operações
  166. ;   aritméticas de multiplicação, divisão inteira e resto da divisão inteira. Considere que o
  167. ;   domínio de todas as funções é o conjunto dos pares ordenados de números inteiros, e que
  168. ;   o contradomínio de todas elas é o conjunto dos números inteiros.
  169.  
  170. (defun mult (X Y)
  171.     (cond
  172.         ((equal Y 0) 0) ;se Y igual a zero retorna zero, X * 0 = 0
  173.         ((equal X 1) Y) ;se X igual a 1 retorna Y, 1 * Y = Y
  174.         ((negativo Y) (SUBTRACAO (mult X (1+ Y)) X)) ;se Y for negativo entra na subtracao pois multiplicacao com negativo tende a diminuir
  175.         ('t (soma X (mult X (1- Y)))) ;senao, usa soma mesmo X sendo negativo
  176.     )
  177. )
  178. ;6- Escreva uma função que calcula a potenciação. Considere que o domínio dessa função é o
  179. ;   conjunto dos pares ordenados formados por um número inteiro (a base) e um número
  180. ;   natural (o expoente) e que o contradomínio dela é o conjunto dos números inteiros.
  181. (defun poten (X Y)
  182.     (cond
  183.         ((equal Y 0) 1) ;compara Y com 0, se igual retorna 1
  184.         ;((negativo y) (mult (poten X (1+ Y)) X)) acho que no lugar do mult eh divi
  185.         ('t (mult (poten X (1- Y)) X)) ;multiplicacao com a recursao diminuindo o Y(loop)
  186.     )
  187. )
  188.  
  189.  
  190. ;7- Escreva uma função que calcula e retorna o fatorial de um dado numero natural
  191. (defun fatorial (X)
  192.     (cond
  193.         ((equal X 0) 1) ;compara x com 0, se sim retorna 1, pois fatorial de 0 é 1
  194.         ;((negativo X) (mult(fatorial (1- X)) X)) acho que no lugar de mult eh divi
  195.         ('t (mult(fatorial (1- X)) X)) ;;multiplicacao com a recursao diminuindo o X
  196.     )
  197. )
  198.  
  199. ;9- Escreva um predicado que verifica se um átomo ocorre em uma lista de átomos.
  200. (defun OcorreAtEmLstAt (A L)
  201.     (cond ((atom L) 'nil) ;verifica se L eh um atomo
  202.           ((equal (CAR L) A) 'T) ;verifica se A eh o primeiro elemento da lista
  203.           ('T (OcorreAtEmLstAt A (CDR L))) ;recursao com o resto da lista
  204.     )
  205. )
  206.  
  207. ;11- Escreva uma função que elimina de uma lista de átomos todas as ocorrências de um dado átomo.
  208. (defun RemoveAtEndLstAt (A L)
  209.     (cond ((atom L) L) ;se L for atomo retorna L
  210.           ((equal A (car L)) (RemoveAtEndLstAt A (cdr L))); se o primeiro elemento da lista é igual a A
  211.           ('T (cons (car L) (RemoveAtEndLstAt A (cdr L)))); construi lista nova
  212.     )
  213. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement