Mostrando entradas con la etiqueta Scheme. Mostrar todas las entradas
Mostrando entradas con la etiqueta Scheme. Mostrar todas las entradas

lunes, 21 de enero de 2008

Funcion Sublista desde dos posiciones en Lenguaje Scheme

Defina una función sublista a la que pasándole una lista: L, y dos enteros: ini y lon, devuelva una lista formada por los elementos de L desde el ini hasta el ini+lon -1. Suponga que los elementos están numerados desde el 1 hasta n. Si se solicitan tantos elementos que se sobrepasa el final de la lista devolver el máximo posible.

(define (sublista Lista1 ini long)
(cond
((null? Lista1) null)
((= long 0) null)
((> ini 1) (sublista (cdr Lista1) (- ini 1) long))
((= ini 1)(cons (car Lista1)(sublista (cdr Lista1) ini (- long 1))))))

Fusionar Dos Listas en Una en Lenguaje Scheme

Defina una función llamada fusiona que, pasándole dos listas de enteros ordenados, devuelva una sóla lista con todos los enteros ordenados.

(define (fusiona Lista1 Lista2)
(cond
((null? Lista1) Lista2)
((null? Lista2) Lista1)
((>= (car Lista1)(car Lista2)) (cons (car Lista2)(fusiona Lista1 (cdr Lista2))))
((<(car Lista1)(car Lista2)) (cons (car Lista1)(fusiona (cdr Lista1) Lista2)))))

Buscar un Lista en otra en Lenguaje Scheme

Escriba una función busca que, pasándole dos listas: L1 y L2, devuelva verdadero si la lista L1 está contenida en L2, o sea, si la lista L1 es una sublista de L2 y falso en caso contrario. La sublista vacía está contenida en cualquier lista.
(define (busca Lista1 Lista2)
(cond
((null? Lista1) #t)
((null? Lista2) #f)
((eq? (car Lista1)(car Lista2))
(busca(cdr Lista1) (cdr Lista2)))
(else (busca Lista1(cdr Lista2)))))

Añadir al Final un Elemento en Lenguaje Scheme

Defina una función snoc que, pasándole como parámetro una lista y un elemento, devuelve una lista formada por la lista pasada como primer parámetro a la que se le ha añadido como último elemento el segundo parámetro.

(define(snoc Lista1 Aux)
(if (null? Lista1)
(cons Aux null)
(cons (car Lista1) (snoc(cdr Lista1) Aux))))

Funcion Palíndroma en lenguaje Scheme

(define (palindroma Lista)
(cond
((null? Lista) #t)
((null? (cdr Lista)) #t)
((eq? (car Lista) (rac Lista)) (palindroma (rdc (cdr Lista))))
(else #f)))

Devolver el Ultimo Elemento de un Lista en Lenguaje Scheme

Defina una función rac que, pasándole como parámetro una lista con al menos un elemento, devuelve el último elemento de la lista.

(define (rac L)
(cond
((null? L) #f )
((not(list? L)) L )
(else (rac (cdr L)))))

Funcion Ackerman en Lenguaje Scheme

La función de Ackermann se define como:
A(m,n) = n+1 si m=0
A(m,n) = A(m-1,1) si m > 0 y n = 0
A(m,n) = A(m-1,A(m,n-1)) en otro caso
Implemente dicha función en Scheme. No pruebe la función para valores grandes ya que crece muy deprisa.

(define (Ackermann m n)
(if(= m 0) (+ n 1)
(if(= n 0) (Ackermann (- m 1) 1)
(Ackermann (- m 1) (Ackermann m (- n 1)))
)))

Resta de dos conjuntos en Lenguaje Scheme

Definir una función resta con dos parámetros del tipo lista l1 y l2, que devuelva una lista con el conjunto resta del primer parámetro menos el segundo. La resta del A-B se define como los elementos en A que no están en B.

(define (resta L1 L2)
(if (null? L1) null
(if (null? L2) L1
(if (esta (car L1) (interseccion L1 L2))
(resta (cdr L1) L2)
(cons (car L1) (resta (cdr L1) L2))))))

Intersección de dos Conjuntos en Lenguaje Scheme

Definir una función interseccion con dos parámetros del tipo lista l1 y l2, que devuelva una lista con el conjunto intersección.


(define (interseccion L1 L2)
(if (null? L1) null
(if (null? L2) null
(if (esta (car L1) L2)
(cons (car L1) (interseccion (cdr L1) L2))
(interseccion (cdr L1) L2)))))

Union de dos listas en lenguaje Scheme

Defina una función union con dos parámetros del tipo lista l1 y l2, que devuelva una lista con el conjunto unión.

(define (union L1 L2)
(if(null? L1)
L2
(if (esta (car L1) L2) (union (cdr L1) L2)
(cons (car L1) (union (cdr L1) L2)))))

Elementos repetidos en un lista en Lenguaje Scheme

Defina una función esconjunto con un parámetro del tipo lista l que devuelva falso si la lista tiene elementos repetidos y verdadero en otro caso.

(define (esconjunto L)
(if(null? L)#t
(if(esta (car L) (cdr L) )#f
(esconjunto (cdr L))
)))

Función Fibonacci en Lenguaje Scheme

Defina una función fibo que acepte un entero n como parámetro y que devuelva el elemento ;enésimo de la serie de Fibonacci.

(define (fibo n)
(if(<= n 1) 1
(+ (fibo(- n 1)) (fibo(- n 2)))
)
)

Extrae desde dos posiciones en Lenguaje Scheme

Escriba una función extrae la cuál debe constar de tres argumentos: una lista, un número de posición inicial y otro número de posición final. La función deberá devolver la lista formada sólo por las letras comprendidas entre la posición inicio y final. En el caso que la lista esté vacía o bien inicio sea mayor que final se devolverá la lista vacía. Si final sobrepasa el tamaño de la lista se devolverán todos los elementos posibles


(define (extrae Lista1 inicio final)
(if (zero? final) null
(if (zero? inicio) null
(if (null? Lista1) Lista1
(if(= inicio 1) (cons (car Lista1) (extrae (cdr Lista1) 1 (- final 1)))
(extrae (cdr Lista1) (- inicio 1) (- final 1)))))))

Número de veces que aparece un valor en un lista en Lenguaje Scheme

Defina en Scheme una función ocurrencia que permita contar el número de veces que aparece un determinado valor dentro de una lista. Utilice para ello la función let


(define (ocurrencia x Lista1)
(if(null? Lista1) 0
(if(eq? x (car Lista1)) (+ 1 (ocurrencia x (cdr Lista1)))
(ocurrencia x (cdr Lista1)))))

Elimina elementos repetidos de una lista en Lenguaje Scheme

Escriba una función repetidos que recibe como único argumento una lista y retorna otra lista a la que se ha eliminado los elementos repetidos de la lista de entrada (dejando únicamente la última aparición). Puede utilizar para ello la función miembro? (en otro post)


(define (repetidos Lista1)
(cond
((null? Lista1) Lista1)
((miembro? (car Lista1) (cdr Lista1)) (repetidos (cdr Lista1)))
(else (concatena (list (car Lista1)) (repetidos (cdr Lista1))))))

Ver si un Elemento esta en la Lista en lenguaje Scheme

Escriba una función miembro? que permita verificar (verdadero o falso) si x es un elemento que está en la lista ls usando equal? para comparar (no puede usar el procedimiento member de scheme)


(define (miembro? x Lista1)
(if (null? Lista1)
#f
(if (eq? x (car Lista1))
#t
(miembro? x (cdr Lista1)))))

Elimina apariciones de un elemento en un lista en Lenguaje Scheme

Utilizando la función equal?, defina una función elimina que dado un elemento y una lista, devuelva dicha lista en la cual se han eliminado todas las apariciones del elemento

(define (elimina x Lista1)
(if (null? Lista1)
'()
(if (eq? x (car Lista1))
(elimina x (cdr Lista1))
(cons (car Lista1) (elimina x (cdr Lista1))))))

Invierte Lista en lenguaje Scheme

Utilizando la función concatena (esta en otro post), defina una función invierte que dada una lista devuelva dicha lista con sus elementos en orden inverso.


(define (invierte Lista1)
(cond
((null? Lista1) '())
((list? Lista1) (concatena (invierte(cdr Lista1))(list(car Lista1))))
(else (display '(Debe pasar una lista como parametro)))))

Concatena en Lenguaje Scheme

Defina una función concatena que dadas dos listas devuelva otra lista resultado de la concatenación simple de las dos pasadas como parámetros. (No puede utilizarse la función append de scheme)

(define (concatena Lista1 Lista2)
(if (null? Lista1)
Lista2
(cons (car Lista1) (concatena (cdr Lista1) Lista2))))

Devolver la Lista Multiplicada por un factor en lenguaje Scheme

Escriba una función scale que devuelva la lista pasada como entrada con sus elementos escalados (multiplicados) por un factor dado.

(define (scale Lista1 x)
(if (null? Lista1) '()
(cons(* x (car Lista1))(scale (cdr Lista1) x))))