100% encontró este documento útil (1 voto)
120 vistas

Programación Funcional en Python, Haskell y Java

El documento presenta el código en Python, Java y Haskell para resolver 7 problemas de programación funcional. Cada problema consiste en definir una función que resuelva una tarea específica como encontrar el último dígito de un número, determinar si un número se encuentra en una lista, ordenar una lista usando quicksort, etc. Para cada problema se presenta la implementación de la función en los 3 lenguajes de programación.

Cargado por

carla
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
120 vistas

Programación Funcional en Python, Haskell y Java

El documento presenta el código en Python, Java y Haskell para resolver 7 problemas de programación funcional. Cada problema consiste en definir una función que resuelva una tarea específica como encontrar el último dígito de un número, determinar si un número se encuentra en una lista, ordenar una lista usando quicksort, etc. Para cada problema se presenta la implementación de la función en los 3 lenguajes de programación.

Cargado por

carla
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 12

INSTITUTO TECNOLGICO DE TEPIC

MATERIA: PROGRAMACIN LGICA Y FUNCIONAL

Unidad 3 y 4: Programacin Funcional


ACTIVIDAD 4. PF en Java, Python y Haskell

INTEGRANTES DE EQUIPO:
RODRGUEZ HERNNDEZ JOS
ANTONIO

NO.
CONTROL:
13400484

CARRERA: ING. SISTEMAS COMPUTACIONALES


MAESTRO: VIZCANO GARCA JORGE HONORIO.
HORA: 19:00 20:00 HRS.
TEPIC, NAYARIT A 22 DE NOVIEMBRE DE 2016.

Actividad 4 de la Unidad/Tema 2y3 (21


puntos)
Escribir el cdigo en Python, Java y Haskell (el cdigo en
Python y Java debe de ajustarse en lo posible a
fundamentos/conceptos de PF) para los siguientes ejercicios:
1. Funcin que reciba un nmero n entero y retorne el ltimo
dgito de n.
Python:
#1.- Funcin que reciba un nmero n entero y retorne el ltimo dgito de
n.
def P1(n):
return n%10

Java:
//1.- Funcin que reciba un nmero n entero y retorne el ltimo dgito de
n.
public static int P1(int n){
System.out.println("El nmero ingresado es: "+n+"\nEl ltimo dgito
es: "+(n%10));
return n%10;
}

*Ejecutando en el main:
P1(123123121);

Haskell:
--1.- Funcin que reciba un nmero n entero y retorne el ltimo dgito de
n.

p1 x= mod x 10

2. Funcin que reciba un nmero entero n y una lista de


nmeros enteros; y que determine si n se encuentra en la
lista o no.
Python:
#2.- Funcin que reciba un nmero entero n y una lista
enteros; y que determine si n se encuentra en la lista o no.

de

nmeros

def P2(n,list):
print (any(x=n for x in list))

Java:
//2.- Funcin que reciba un nmero entero n y una lista de nmeros
enteros; y que determine si n se encuentra en la lista o no.
public static boolean P2(int n, List<Integer> l){
System.out.println("Lista: "+l);
System.out.println("Numero: "+n);
return l.contains(n);
}

Ejecutando en el main:
List<Integer> l = new ArrayList<Integer>();
l.add(4);
l.add(5);
l.add(6);
l.add(2);
l.add(45);
l.add(7);
l.add(73);

l.add(82);

System.out.println("El nmero est en la lista? " + P2(82,l));

Haskell:
--2.- Funcin que reciba un nmero entero n y una lista de nmeros
enteros y que determine si n se encuentra en la lista o no.
p2 n l = or(map (==n)l)

3. Funcin que reciba un nmero entero n y una lista de


nmeros enteros; y que rote n elementos de dicha lista y
regrese la lista rotada.
Python:
#3.- Funcin que reciba un nmero entero n y una lista de nmeros
enteros; y que rote n elementos de dicha lista y regrese la lista
rotada.
def P3(n,lista):
return lista[-n:] + lista[:-n]

Java:
//3.- Funcin que reciba un nmero entero n y una lista de nmeros
enteros; y que 'rote' n elementos de dicha lista y regrese la lista
'rotada'.
public static List<Integer> P3(int n, List<Integer> l){
List<Integer> nueva= new ArrayList<Integer>();
nueva.addAll(l.subList(n, l.size()));
nueva.addAll(l.subList(0,n));
System.out.println("Matriz original: "+l);
return nueva;
}

Ejecutando en el main:
4

List<Integer> l = new ArrayList<Integer>();


l.add(4);
l.add(5);
l.add(6);
l.add(2);
l.add(45);
l.add(7);
l.add(73);
l.add(82);
System.out.println("Matriz rotada: "+ P3(3,l));

Haskell:
--3.- Funcin que reciba un nmero entero n y una lista de nmeros
enteros y que 'rote' n elementos de dicha lista y regrese la

4. Funcin que reciba una lista de nmeros enteros, que eleve


al cubo los nmeros pares de la lista y al cuadrado los
nmeros impares; y regrese nueva lista.
Python:
#4.- Funcin que reciba una lista de nmeros enteros, que eleve al cubo
los nmeros pares de la lista y al cuadrado los nmeros impares; y
regrese nueva lista.
def P4(lista):
return [] if lista==[] else [lista[0]**2]
lista[0]%2==0 else [lista[0]**3] + P4(lista[1:])

P4(lista[1:])

if

Java:

// 4.- Funcin que reciba una lista de nmeros enteros, que eleve al cubo
los nmeros pares de la lista y al cuadrado los nmeros impares; y
regrese nueva lista.
public static Object[] P4(List<Integer> l){
System.out.println(l);
return l.stream().map(num
2):Math.pow(num, 3)).toArray();

->

(num%2==0)?Math.pow(num,

OJO: SE CRE UNA FUNCION PARA IMPRIMIR EL ARRAY


public static void imprimirOb(Object[] array){
String cad="[";
for (int i=0;i<=array.length-1;i++){
cad+=array[i];
if(i<array.length-1)cad+=",";
}
System.out.println(cad+"]");
}

Ejecutando en el main:
List<Integer> l = new ArrayList<Integer>();
l.add(4);
l.add(5);
l.add(6);
l.add(2);
l.add(45);
l.add(7);
l.add(73);
l.add(82);
imprimirOb(P4(l));

Haskell:

--4.- Funcin que reciba una lista de nmeros enteros, que eleve al cubo
los nmeros pares de la lista y al cuadrado los nmeros
pot num= if even num then num^2 else num^3
p4 n = [pot num | num<- n]

5. Funcin que reciba una lista de nmeros enteros y regrese


una lista slo con los primos de la primer lista.
Python:
#5.- Funcin que reciba una lista de nmeros enteros y regrese una lista
slo con los primos de la primer lista.
def P5(l):
return [] if l==[] else [l[0]]+P5(l[1:]) if P5Val(l[0],0,1) else
P5(l[1:])

def P5Val(num,n,i):
return False if n>2 else P5Val(num,n+1,i+1)
P5Val(num,n,i+1) if num>i else True

if

num%i==0

else

Java:
//5.- Funcin que reciba una lista de nmeros enteros y regrese una lista
slo con los primos de la primer lista.
public static List<Integer> P5(List<Integer> l){
List<Integer> nueva= new ArrayList<Integer>();
if(l.size()==0) return nueva;
else if(P5Val(l.get(0),0,1)){
nueva.add(l.get(0));
nueva.addAll(P5(l.subList(1,l.size())));
return

nueva;

}
else return P5(l.subList(1,l.size()));
}

public static boolean P5Val(int num,int

n,int i){

if(n>2) return false;


else if(num%i==0) return P5Val(num,n+1,i+1);
else if (num>i) P5Val(num,n,i+1);
return true;
}

Ejecutando en el main:
List<Integer> l = new ArrayList<Integer>();
l.add(4);
l.add(5);
l.add(6);
l.add(2);
l.add(45);
l.add(7);
l.add(73);
l.add(82);
System.out.println(P5(l));

Haskell:
--5.- Funcin que reciba una lista de nmeros enteros y regrese una lista
slo con los primos de la primer lista.

6. Funcin que reciba un nmero entero (positivo) y retorne


una lista de nmeros enteros entre 1 y n que sean
divisores "exactos" de n.
Python:
#6.- Funcin que reciba un nmero entero (positivo) y retorne una lista
de nmeros enteros entre 1 y n que sean divisores "exactos" de n.
def P6(n):
lista=[]
print(P6Val(n,1,lista))

def P6Val(n,i,l):
return l+[n]
P6Val(n,i+1,l)

if

n==i

else

(P6Val(n,i+1,l+[i]))

if

n%i==0

else

Java:
//6.- Funcin que reciba un nmero entero (positivo) y retorne una lista
de nmeros enteros entre 1 y n que sean divisores "exactos" de n.
public static List<Integer> P6(int n){
List<Integer> l = new ArrayList<Integer>();
return P6Val(n,l,1);
}
public static List<Integer> P6Val(int n,List<Integer> lista, int i){
if(i==n){
lista.add(n);
return lista;
}
if(n%i==0)lista.add(i);
return P6Val(n,lista,++i);
}

Ejecutando en el main:
System.out.println(P6(5000));

Haskell:
--6.- Funcin que reciba un nmero entero (positivo) y retorne una lista
de nmeros enteros entre 1 y n que sean divisores "exactos" de n.

7. Funcin que reciba una lista de nmeros enteros,


implemente el ordenamiento Quick Sort y que retorne la
lista ordenada.
9

Python:

#7.- Funcin que reciba una lista de nmeros enteros, implemente el


ordenamiento Quick Sort y que retorne la lista ordenada.
def quicksort(A,izq,der):
pivote=A[izq]
i=izq
j=der
while(i<j):
while (A[i]<=pivote and i<j):
i+=1
while (A[j]>pivote):
j-=1
if(i<j):
aux=A[i]
A[i]=A[j]
A[j]=aux
A[izq]=A[j]
A[j]=pivote
if(izq<j-1):
quicksort(A,izq,j-1)
if(j+1<der):
quicksort(A,j+1,der)
return A

def P7(l):
return quicksort(l,0,len(l)-1)

Java:

10

//7.- Funcin que reciba una lista de nmeros enteros, implemente el


ordenamiento Quick Sort y que retorne la lista ordenada.
public static int[] P7(int num[]){
quicksort(num,0,num.length-1);
return num;
}
public static void quicksort(int A[], int izq, int der) {
int pivote=A[izq];
int i=izq;
int j=der;
int aux;

while(i<j){
while(A[i]<=pivote && i<j) i++;
while(A[j]>pivote) j--;
if (i<j) {
aux= A[i];
A[i]=A[j];
A[j]=aux;
}
}
A[izq]=A[j];
A[j]=pivote;
if(izq<j-1) quicksort(A,izq,j-1);
if(j+1 <der) quicksort(A,j+1,der);
}

OJO: SE CRE UNA FUNCION PARA IMPRIMIR EL ARRAY


public static void imprimirInt(int[] array){
String cad="[";
for (int i=0;i<=array.length-1;i++){
cad+=array[i];
if(i<array.length-1)cad+=",";
}
System.out.println(cad+"]");

11

Ejecutando en el main:
int Array[]={2,35,6,8,54,17,33,4,5};
System.out.println("Matriz Original: ");
imprimirInt(Array);
System.out.println("Matriz Ordenada: ");
imprimirInt(P7(Array));

Haskell:
--7.- Funcin que reciba una lista de nmeros enteros, implemente el
ordenamiento Quick Sort y que retorne la lista ordenada.
quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) =
let smallerSorted = quicksort [a | a <- xs, a <= x]
biggerSorted = quicksort [a | a <- xs, a > x]
in smallerSorted ++ [x] ++ biggerSorted

12

También podría gustarte