/*
 * ej-02-01.pl
 *
 * Dada la siguiente base de datos prolog:
 */


persona( documento(tipo('DNI'),numero(10345908)),
         nombre('Jose', 'Luis', 'Perez'),
	 direccion(calle('Talcahuano'),numero(230)) ).

persona( documento(tipo('DNI'),numero(11346977)),
         nombre('Roberto', 'Juan', 'Marin'),
	 direccion(calle('Cullen'),numero(6740)) ).

persona( documento(tipo('DNI'),numero(11746988)),
         nombre('Federico', 'Alberto', 'Fernandez'),
	 direccion(calle('Cullen'),numero(6740)) ).


ocupacion( documento(tipo('DNI'),numero(10345908)),
           cargo(supervisor), area(contable) ).

ocupacion( documento(tipo('DNI'),numero(11346977)),
           cargo(oficinista), area(contable) ).

ocupacion( documento(tipo('DNI'),numero(11346977)),
           cargo(oficinista), area(contable) ).


salario( cargo(supervisor), area(contable), 1250 ).
salario( cargo(oficinista), area(contable),  750 ).
salario( cargo(oficinista), area(personal),  600 ).
salario( cargo(supervisor), area(taller),    690 ).

/*
 * Proponer los siguientes predicados:
 *
 * salario(Nombre, Sueldo)
 *   Sueldo: un entero
 *
 * direccion(Nombre, CalleNumero)
 *   CalleNumero: lista de dos elementos, [ Calle, Numero ]
 *
 * cargo(Nombre, Cargodesempenado)
 *   CargoDesempenado: cadena de caracteres
 *
 * documento(Nombre, NroDocumento)
 *   NroDocumento: lista de ds elementos: [ Tipo, Numero ]
 *
 * En todos los casos Nombre debe ser una lista de tres elementos:
 *   [ PrimerNombre, SegundoNombre, Apellido ]
 */


nombre2lista( nombre(N1,N2,A), [N1, N2, A] ).

salario( NombreLista, Sueldo ) :-
	nombre2lista( NombreFunctor, NombreLista ),
	persona( Documento, NombreFunctor, _ ),
	ocupacion( Documento, Cargo, Area ),
	salario( Cargo, Area, Sueldo ).


direccion(NombreLista, [ C, N ] ) :-
	nombre2lista( NombreFunctor, NombreLista ),
	persona( _ , NombreFunctor, direccion(calle(C), numero(N)) ).
	

cargo( NombreLista, Cargo) :-
	nombre2lista( NombreFunctor, NombreLista ),
	persona( Documento, NombreFunctor, _ ),
	ocupacion( Documento, cargo(Cargo), _ ).


documento( NombreLista, [ Tipo, Numero ] ) :-
	nombre2lista( NombreFunctor, NombreLista ),
	persona( documento(tipo(Tipo), numero(Numero)), NombreFunctor, _ ).

