Notas - Unican.es

Anuncio
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
Descargar