Skip to content

Commit c9e88de

Browse files
authored
Merge pull request mouredev#4549 from edalmava/erlang
#3 - Erlang
2 parents 72bed32 + 63cd7c2 commit c9e88de

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
-module(edalmava).
2+
-export([listas/0, tuplas/0, listasProps/0, registros/0, mapas/0, extra/0]).
3+
-record(agenda, {nombre, telefono}). % Estructura registro. Se emplea esta directiva de preprocesamiento
4+
5+
% Listas: vectores de información heterogénea. Erlang maneja las listas como
6+
% lenguaje de alto nivel
7+
listas() ->
8+
% Definición de una lista
9+
Lista = [1, 2, 3, 4, 5],
10+
11+
% Agregar elementos a la lista
12+
ListaA = Lista ++ [6, 7, 8, 9, 0], % [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
13+
% Sustraer elementos a la lista
14+
ListaS = ListaA -- [0], % [1, 2, 3, 4, 5, 6, 7, 8, 9]
15+
16+
% Extrayendo elementos de la cabecera dejando el resto en sublistas
17+
[H | T] = ListaS,
18+
19+
io:format("Primer elemento: ~w~n", [H]), % Primer elemento de la lista % 1
20+
io:format("Resto de la lista: ~w~n", [T]). % Resto de la lista % [2, 3, 4, 5, 6, 7, 8, 9]
21+
22+
% TODO: Listas binarias
23+
% TODO: Listas E/S
24+
25+
% Tuplas: tipos de datos organizativos. A diferencia de las listas no pueden incrementar ni decrementar
26+
% su tamaño salvo por la redefinición completa de su estructura o el uso de funciones específicas.
27+
% Se emplean para agrupar datos con un propósito específico.
28+
tuplas() ->
29+
Tamano = 100,
30+
Tupla = {"Ruta", "Nombre", Tamano}, % Tupla que guarda la información de un fichero
31+
32+
% Modificación dinámica de tuplas
33+
% Cambiar un elemento de una tupla
34+
TuplaM = erlang:setelement(1, Tupla, "/home/edalmava/archivo.erl"), % Cambiar el primer elemento
35+
% Agregar un elemento al final de la tupla
36+
TuplaA = erlang:append_element(TuplaM, {date(), time()}), % Agregar la fecha de modificación
37+
TuplaA2 = erlang:append_element(TuplaA, {date(), time()}), % Agregar la fecha de modificación
38+
% Eliminar un elemento de la tupla
39+
TuplaE = erlang:delete_element(5, TuplaA2), % Eliminar el último elemento
40+
41+
io:format("~p~n", [TuplaE]).
42+
43+
% Listas de Propiedades: lista de tuplas de dos elementos: clave, valor. Se gestiona mediante la librería
44+
% proplists. Son usadas para almacenar configuraciones
45+
data() ->
46+
[{path, "/"}, debug, {days, 7}].
47+
listasProps() ->
48+
io:format(proplists:get_value(debug, data())). % Obtener el valor de debug
49+
50+
% Registros: son un tipo específico de tupla que facilita el acceso a los datos individuales dentro
51+
% de la misma mediante un nombre y una sintaxis de acceso mucho más cómoda para el programador.
52+
registros() ->
53+
A = #agenda{nombre="Edalmava", telefono="573100000000"},
54+
io:format("Nombre: "),
55+
io:format(A#agenda.nombre),
56+
io:format("~nTeléfono: "),
57+
io:format(A#agenda.telefono),
58+
A2 = {agenda, "Pedro", "573101010100"},
59+
io:format("~nNombre: "),
60+
io:format(A2#agenda.nombre),
61+
io:format("~nTeléfono: "),
62+
io:format(A2#agenda.telefono).
63+
64+
% Mapas: son estructuras de datos. Cada elemento se almacena bajo un índice o clave y contiene un valor.
65+
% El índice puede ser de cualquier tipo al igual que su contenido
66+
mapas() ->
67+
% Definición de un mapa
68+
M = #{nombre => "Edalmava"},
69+
% Agregar datos a un mapa
70+
M2 = M#{telefono => "573100000000"},
71+
% Cambio sobre un índice existente
72+
M3 = M2#{telefono := "573150000000"},
73+
io:format("Nombre: "),
74+
io:format(maps:get(nombre, M3)),
75+
io:format("~nTeléfono: "),
76+
io:format(maps:get(telefono, M3)).
77+
78+
% RETO EXTRA
79+
buscar() ->
80+
"",
81+
extra().
82+
insertar() ->
83+
"",
84+
extra().
85+
actualizar() ->
86+
"",
87+
extra().
88+
eliminar() ->
89+
"",
90+
extra().
91+
extra() ->
92+
io:format("~n"),
93+
io:format("1. Buscar Contacto~n"),
94+
io:format("2. Insertar Contacto~n"),
95+
io:format("3. Actualizar Contacto~n"),
96+
io:format("4. Eliminar Contacto~n"),
97+
io:format("5. Salir~n"),
98+
Opcion = string:trim(io:get_line("Escoja una opción: "), both, "\n"),
99+
case Opcion of
100+
"1" -> buscar();
101+
"2" -> insertar();
102+
"3" -> actualizar();
103+
"4" -> eliminar();
104+
"5" -> ok;
105+
_ -> extra()
106+
end.

0 commit comments

Comments
 (0)