*********************************** ********** LIN2 - Scheme ********** *********************************** Data : 08/10/2002 Versão : 04/07/2007 Professor: Wagner Toscano Autor : Leandro Salvador ( leandrosalvador.com.br ) * Perguntas - tipos de estruturas primitivas - átomos, ex: A, 15 - listas, ex: '(A B C D) - dada a lista '((a b) (c d) (e f g)) - escreva a expressão que forneça a letra 'd' (CDR (CADR '((a b) (c d) (e f g)) ou então (CDR (CAR (CDR '((a b) (c d) (e f g))))) * SQRT - retorna a raiz - o parâmetro não pode ser negativo - exemplos (SQRT 4) --> 2 * QUOTE - usado quando não deseja-se que uma função evolua - pode ser substituído por apóstrofe simples ' - exemplo (QUOTE A) --> A (QUOTE (A B C) --> (A B C) * CAR - seletor de lista - seleciona o primeiro elemento de uma lista - exemplo CAR ('(A B C)) --> A * CDR - seletor de lista - seleciona o corpo de uma lista - exemplo CDR ('(A B C)) --> '(B C) * CONS - construtor de lista - constrói a lista através de dois parâmetros - 1º pode ser um átomo ou uma lista - 2º é uma lista - exemplo (CONS 'A '(B C)) --> '(A B C) (CONS '(A B) '(C D) --> '((A B) C D) * LIST - construtor de lista - constrói a lista através de parâmetros 1º é considerado a cabeça - exemplo (LIST 'A' 'B' 'C') = (CONS 'A '(B C) * LIST?, EQ?, NULL? - função de predicado que retorna valores booleanos #F --> false #T --> true * LIST? - retorna "()" --> lista vazia - retorna #T --> lista não vazia * EQ? - retorna #T --> comparação for sobre átomos e se forem iguais * NULL? - retorna #T --> lista vazia - retorna "()" --> lista não vazia * DISPLAY - comando de saída - exemplo (DISPLAY expressão) * NEWLINE - comando de formatação - força o salto de uma linha - exemplo (NEWLINE) * IF - deve ser utilizado somente quando houver uma única condição - exemplo (IF (= n 0) 1) * DEFINE - "pi" (DEFINE pi 3.14159) - 2 * "pi" (DEFINE dois_pi (* 2 pi)) - quadrado de um número ((DEFINE quadrado numero) (* numero numero)) - utilização --> (quadrado 5) = 25 - raiz positiva de uma equação do segundo grau - expressão --> (ax^2 + bx + c) - fórmula --> - b +- raiz de delta / 2 * a - raiz de delta --> b^2 - 4 * a * c (DEFINE (RzDelta a b c) (SQRT (- (* b b) (* 4 a c)))) (DEFINE (expr2g a b c) (/ (+ (- b) (RzDelta a b c)) (* 2 a))) - área de um trapézio - fórmula --> (((basemaior + basemenor) * altura) / 2) (DEFINE (areaTrapezio a b h) (/ (* (+ a b) h))) - criar uma lista vazia (DEFINE (gasesNobres) '()) - preencher uma lista vazia (SET! gasesNobres ('(He Ne Ar Kr Xe Rn))) - ler a lista anterior - ler a cabeça (CAR gasesNobres) --> He - ler o corpo (CDR gasesNobres) --> '(Ne Ar Kr Xe Rn) - ler o 3º elemento (CAR (CDR (CDR gasesNobres))) --> Ar (CADDR gasesNobres) = Ar - transformar graus Célsius em Farenheit - fórmula --> 5 * ((f - 32) / 9) (DEFINE (f2c f) (* 5 (/ 9 (f - 32)))) (f2c -40) --> -40 (f2c 32) --> 0 (f2c 212) --> 100 - fatorial (DEFINE (fatorial n) (IF (= n 0) 1) (* n (fatorial (- n 1)))) - condicional - retorna último valor --> todas forem verdadeiras - retorna () --> alguma for falsa ((COND((ExpreLog) #T (ExprLog) #T #F))) COND ((> 4 3) 8 (< 7 9) 10) --> 10 - identificar se um átomo faz parte de uma lista (DEFINE (member atm lis) (COND ((NULL ? lis) '()) ((EQ? atm (CAR lis) #T)) (ELSE (MEMBER atm(CDR lis))) - incluir um átomo na lista (DEFINE (APPEND lis1 lis2) COND ((NULL? lis1) lis2) ELSE (CONS (CAR lis1) lis2))) (APPEND '(a b) '(C D E)) --> '(a b C D E) (APPEND '((a b) C) '(D (e f))) --> '((a b) C D (e f)) - hipotenusa - fórmula --> h^2 = a^2 * b^2 (DEFINE (hipo a b) (SQRT (+ (* a a) (* b b)))) - potência (DEFINE (potAux base expoente resultado) (IF (= resultado 0) resultado (potAux base (- expoente 1) (* resultado base)))) (DEFINE (potencia base expoente) (potAux base expoente 1)) ----------//----------