Valores Booleanos Interpretación #t Cierto #f Falso -------------------------------------------------------------------Números Pueden ser Complejos Reales Racionales Enteros ------------------------------Predicados relativos a números Interpretación Tipos objeto Cualquier objeto Scheme (number? objeto) (complex? objeto) (real? objeto) (rational? objeto) (integer? objeto) ¿Es ¿Es ¿Es ¿Es ¿Es objeto objeto objeto objeto objeto Comparaciones n1 n2 r1 r2 Números Números reales (= n1 n2) (< r1 r2) (> r1 r2) (<= r1 r2) (>= r1 r2) ¿Es ¿Es ¿Es ¿Es ¿Es n1 r1 r1 r1 r1 un un un un un igual menor mayor menor mayor número? número complejo? número real? número racional? número entero? a n2? que r2? que r2? que o igual a r2? que o igual a r2? 1 Signo de números reales. Paridad de enteros. n Número r Número real e Número entero (zero? n) ¿Es cero el número n? (positive? r) ¿Es positivo el número real r? (negative? r) ¿Es negativo el número real r? (odd? e) ¿Es impar el número entero e? (even? e) ¿Es par el número entero e? --------------------------------------------------------------Procedimientos aritméticos básicos generales n n1 n2 Números (add1 (sub1 (+ n1 (* n1 (- n1 (- n) (/ n1 (/ n) n) n) n2) n2) n2) n2) n+1 n-1 n1+n2 n1xn2 n1-n2 -n [opuesto de n] n1/n2 1/n [inverso de n, n distinto de cero] 2 Aritmética entera e e1 e2 Números enteros e2 6= 0 (quotient e1 e2) (remainder e1 e2) q = Cociente de la división entera r = Resto de la división entera Los resultados q y r son tales que e1=e2xq+r, 0 <= abs(r) < abs(e2) y el signo de r coincide con el signo de e1 (modulo e1 e2) Ejemplos: (quotient (remainder (quotient (remainder (quotient (remainder (quotient (remainder 17 11) 17 11) -17 11) -17 11) 17 -11) 17 -11) -17 -11) -17 -11) (modulo (modulo (modulo (modulo 17 11) -17 11) 17 -11) -17 -11) m = e1 mod e2 El signo de m coincide con el signo de e2 ==> ==> ==> ==> ==> ==> ==> ==> 1 6 -1 -6 -1 6 1 -6 ==> ==> ==> ==> 6 5 -5 -6 -------------------------------------------------------------------3 Condicional if if es una forma especial predicado expresion Un predicado una expresión (if predicado expresion) Evalúa predicado si predicado se evalúa a #t [cierto], entonces evalúa expresion y devuelve su valor; si predicado se evalúa a #f [falso], entonces no evalúa expresion y devuelve nada (void) (if predicado expresion1 expresion2) Evalúa predicado si predicado se entonces evalúa si predicado se entonces evalúa evalúa a #t [cierto], expresion1 y devuelve su valor; evalúa a #f [falso], expresion2 y devuelve su valor. Ejemplos (if (= 2 2) 1) (if (= 2 3) 1) ==> ==> 1 (if (= 2 2) 1 0) (if (= 2 3) 1 0) ==> ==> 1 0 (display expresion) (newline) (if (if (if (if (= (= (= (= 2 2 2 2 2) 3) 2) 3) (display (display (display (display 1)) 1)) 1) (display 0)) 1) (display 0)) Escribe el valor No devuelve nada Produce un salto No devuelve nada Escribe 1 No escribe nada Escribe 1 Escribe 0 4 de expresion en la terminal o devuelve un valor no especificado de lı́nea en la terminal o devuelve un valor no especificado -----------------------------------------------------------------Definición de procedimientos Define es una forma especial (define (nombre-del-procedimiento par1 par2 ... parn) cuerpo) (define nombre-del-procedimiento (lambda (x y) cuerpo)) Ejemplo (define (cos-suma x y) (cos (+ x y))) (define cos-suma-otro (lambda (x y) (cos (+ x y)))) Uso (cos-suma 0.7 0.23) (cos-suma-otro 0.7 0.23) ==> ==> 0.5978339822872983 0.5978339822872983 5 Operadores de composición lógica: conjunciones Versión simplificada p p1 p2 (and p1 p2) (or p1 p2) (not p) predicados Si ambos p1 y p2 se evalúan a #t, devuelve #t; en otro caso devuelve #f Si ambos p1 y p2 se evalúan a #f, devuelve #f; en otro caso devuelve #t Si p se evalúa a #t, devuelve #f; en otro caso devuelve #t Ejemplos (define (entero-par? x) (and (integer? x) (even? x))) (define (menor-que-a-o-mayor-que-b x a b) (or (< x a) (> x b))) (define (no-cero? x) (not (zero? x))) -----------------------------------------------------------------6 Condicional cond predicadoi expresioni expresionij cond es una forma especial predicados expresiones expresiones (cond (predicado1 (predicado2 expresion1 ) expresion2 ) (predicadon expresionn ) ) evalúa predicado1 si predicado1 se evalúa a #t [cierto] entonces evalúa expresion1 y devuelve su valor si predicado1 se evalúa a #f [falso] entonces evalúa predicado2 etc ............................... si todos los predicados se evalúan a #f [falso] entonces la forma cond devuelve nada [ (void) ] sin haber evaluado ninguna de las expresiones (cond (predicado1 (predicado2 expresion1 ) expresion2 ) (predicadon−1 expresionn−1 ) (else expresionn ) ) 7 (cond (predicado1 (predicado2 expresion11 expresion21 ... expresion1m ) ... expresion2m ) (predicadon−1 expresion[n−1]1 ... expresion[n−1]m ) (else expresionn1 ... expresionnm ) ) Ejemplo: el signo de un número real x es -1 si x<0 0 si x=0 1 si x>0 (define (signo-con-mensaje x) (if (not (real? x)) (error "signo-con-mensaje: el argumento debe ser de tipo real pero se le dio: " x)) (cond ((< x 0) (display "negativo") (newline) -1) ((= x 0) (display "cero") (newline) 0) (else (display "positivo") (newline) 1))) 8