Está en la página 1de 4

MATERIA

Programación Lógica y Funcional


Profesor
Rafael Herrera García
GRUPO
7g4B
ALUMNO
Catarino Moreno Alejandro Elias NO:20010248
TEMA
Practica 3

FECHA 11/04/2023
HORA:13:00/14:00
Práctica No. 4

Nombre: Uso de listas por compresión, expresiones, funciones y lambdas.

Introducción:

En esta práctica cada ejercicio deberá analizarse y determinar si se resuelve por


alguna de las técnicas vistas o con dos o con las todas. Cada problema intenten
resolverlo utilizando el mayor número de técnicas en Haskell, como ejercicio extra
intenten plantearsoluciones en Scala.

Materiales y equipos:
1.- Haskell Platform

Metodología

Revisar el archivo practica4.hs proporcionado para esta práctica. Lo que se plantea


es resolver el problema de validación de tarjetas de crédito utilizando el algoritmo
de Luhn. Puedes leer más a cerca de este algoritmo en:

https://www.quobit.mx/asi-funciona-el-algoritmo-de-luhn-para-generar-numeros-
de-tarjetas-de-credito.html

1.- Elaborar una función que dando un entero obtenga una lista de dígitos que
conforman dicho entero, esta lista deberá quedar invertida.

getDigits 871882 dará como resultado [2,8,8,1,7,8]

2.- Elaborar función que, dada una lista de dígitos, obtener la lista con los dígitos
en posiciones pares duplicados, por ejemplo dada la lista:

doubleSecond [3,2,5,1,6,8] ➔ [3,4,5,2,6,16]

3.- Elaborar función que dada una lista de enteros, aplanar cada valor a obtener un
soló digito, por ejemplo si un valor es 14 deberá dar como resultado 5, ya que los
dígitos de este número se sumarian. Por ejemplo:

planishAll [3,16,2,4,11] ➔ [3,7,2,4,2]


4.- Elaborar función que sume una lista de enteros.

sumDigits [1,4,5] ➔ 10

5.- Elaborar función que dado un entero valide si se trata de un número de tarjeta de
crédito, siguiendo el algoritmo de Luhn, Utiliza los métodos previos.

isValid 4320635998241421 ➔ False

Consiste, en duplicar los dígitos pares de derecha a izquierda

8 3 4 0 12 3 10 9 18 8 4 4 2 4 4 1

Todos los números obtenidos superiores a 9 reducirlos a un solo dígito sumando


estos.
8340331998442441

Sumar los elementos de la lista y si esta es múltiplo de 10 quiere decir que es un


número de tarjeta valido.

6.- Elaborar función que dada una lista de enteros retorne la cantidad de ellos que
corresponden a tarjetas de crédito.

numValid creditcards

7.- Elaborar función que recupere de una lista de enteros, los números que
corresponden a tarjetas de crédito validas.

cardsValid creditcards

Recomendaciones

Resuelve cada problema probando con los suficientes casos de prueba para
asegurarse que funciona correctamente.

Observaciones

En este apartado debes poner las observaciones realizadas durante el desarrollo de


la práctica, podrás agregar imágenes, cuadros, tablas y gráficas.
Resultó en cierta manera sencillo gracias a la información de la p ágina web y a las
instrucciones que traía este mismo pdf ya que lo único que quedaba era p ensar un
poco sobre la solución y en algunos de los ejercicios ya solo se requería ocupar las
funciones realizadas anteriormente para solucionar lo planteado.

Cuestionario

1.- Intenta resolver el problema en Java y expresa facilidades y dificultades entre


Haskell, Scala y Java.
Debido a la manera en que se escribe y utiliza Haskell resulta más fácil escribir
código más corto y eficiente, sin embargo, esto también trae dificultades ya que la
manera de pensar para trabajar con Haskell es muy diferente a la de Java y Scala.
Estos dos últimos al ser muy parecidos tienen casi las mismas facilidades y
dificultades, una de sus debilidades es que hay que estar declarando los parámetros
y las variables que se van a utilizar. Por separado, el punto fuerte de Scala es que no
es necesario un método main para ejecutar las funciones a comparación de Java, y
por el lado de Java este p uede reasignar valores a las variables.

2.- Si te solicitaran de una lista de 16 dígitos para volverla a la número de tarjeta


como lo resolverías en haskell y Scala.

Fuentes de información:
http://zvon.org/other/haskell/Outputprelude/index.html
https://stackoverflow.com/questions/46283830

Conclusiones y reflexiones personales:

En este apartado deben poner en un párrafo una conclusión final del equipo y las
reflexiones personales acerca de lo que aprendieron, como lo aprendieron y para que
les puede ser útil lo aprendido.

Desde mi punto de vista, esta práctica resultó de gran ayuda para poder ir pensando
que es lo que se podría hacer en el futuro si es que nos dedicamos a la
programación ya que en la mayoría de los casos se requiere de soluciones que no
ocupen muchos recursos y que sean eficientes. Además, pudimos seguir
entrenando nuestras habilidades con Haskell con ayuda de el material que el
profesor nos proporcionó.

También podría gustarte