SOLUCIÓN DEL PARCIAL, PRIMER PUNTO, una posible solución haciendo cuatro llamados a la misma función from list import * # pre-condicion: longitud(Usuarios)=longitud(tipos) # Usuarios = una lista de usuarios # tipos = una lista de un tipos de usuario de celular, tipo (1-4) # post-condicion: Se devuelve t1 una lista con los usuarios de celular de uno de los tipos (1-4) # descripcion: clasificar los usuarios de celular según un tipo de usuario def celu(Usuarios,tipos,t1,x): if vacia(Usuarios): return t1 else: if cab(tipos)==x: return celu(col(Usuarios),col(tipos),(cons(cab(Usuarios),t1)),x) else: return celu(col(Usuarios),col(tipos),t1,x) # pre-condicion: longitud(Us)=longitud(Tip), Lista de Us = usuarios, lista Tip = tipos #descripcion: clasificar los usuarios de celular en los cuatro tipos posibles (1-4) def clasificar(Us,Tip): return cons(celu(Us,Tip,[],1),cons(celu(Us,Tip,[],2),cons(celu(Us,Tip,[],3),celu(Us,Tip,[],4)))) print clasificar(["Andres","Gustavo","Alejandro","Olga","Fernando","Marco"],[1,2,3,1,4,2]) PRIMER PUNTO, otra posible solución haciendo un sólo llamado a una función from list import * # pre-condicion: longitud(Usuarios)=longitud(tipos), listas de los cuatro tipos de usuarios de celular # post-condicion: Se devuelven los cuatro tipos de usuarios de celular t1,t2,t3,t4(No usan celu) # descripcion: clasificar los usuarios de celular en cuatro grupos def celu(Usuarios,tipos,t1,t2,t3,t4): if vacia(Usuarios): return [t1,t2,t3,t4] else: if cab(tipos)==1: return celu(col(Usuarios),col(tipos),(cons(cab(Usuarios),t1)),t2,t3,t4) elif cab(tipos)==2: return celu(col(Usuarios),col(tipos),t1,(cons(cab(Usuarios),t2)),t3,t4) elif cab(tipos)==3: return celu(col(Usuarios),col(tipos),t1,t2,(cons(cab(Usuarios),t3)),t4) else: return celu(col(Usuarios),col(tipos),t1,t2,t3,(cons(cab(Usuarios),t4))) def clasificar(Us,Tip): return celu(Us,Tip,[],[],[],[]) print clasificar(["Andres","Gustavo","Alejandro","Olga","Fernando","Marco"],[1,2,3,4,4,2]) SEGUNDO PUNTO from list import * # pre-condicion: Li = lista de listas # post-condicion: numero resultado de la sumatoria de todos los numeros pares encontrados # descripcion: calcular la sumatoria de todos los numeros pares encontrados en una lista de listas def sumPar(L): if vacia(L): return 0 else: if eslista(cab(L)): return sumPar(cab(L))+sumPar(col(L)) else: if (cab(L)%2==0): return (cab(L)+sumPar(col(L))) else: return sumPar(col(L)) print sumPar([1,2,[3,2],1,2,[1,4,[4,2,[]]]]) TERCER PUNTO from list import * #pre: Cada elemento de M es una lista # de dos elementos. def piiz(M,F,S): if vacia(M): return[F,S] else: return piiz(col(M),cons(cab(cab(M)),F),cons(cab(col(cab(M))),S)) def pz(M): return piiz(M,[],[]) print pz([[1,11],[2,22],[3,33],[4,44],[5,55]]) Salida después de ejecución >>> [[5, 4, 3, 2, 1], [55, 44, 33, 22, 11]] Esta función intercala los elementos M [[elemento-1, elemento-2], [elemento-1, elemento-2], [elemento-1, elemento-2], [elemento-1, elemento-2]] en dos listas, Devuelve una lista con dos Sub-listas que contienen : Primera Lista = lista formada por elementos-1 de la pareja inicial Segunda Lista = lista formada por elementos-2 de la pareja inicial