Quick actions

cmd+k|ctrl+k

Navigation

Languages

trash

Snippet info

Language

Mercury

Visibility

public

Author

apariciosimon

Created

2024-06-18T19:29:45.350329Z

Updated

2024-06-18T19:29:45.350329Z

:- module main.
:- interface.
:- import_module io.

:- pred main(io::di, io::uo) is det.

:- implementation.
:- import_module list.
:- import_module int. % Importamos el módulo int para operadores aritméticos y relacionales

% Definimos un tipo simple que encapsula un entero
:- type my_data ---> data(int).

% Una función que crea una lista de 'my_data' con n elementos
:- func create_data_list(int) = list(my_data).

create_data_list(N) = (if N =< 0 then [] else [data(N) | create_data_list(N - 1)]).

% Una función que procesa la lista y la convierte en una lista de enteros
:- func process_data_list(list(my_data)) = list(int).

process_data_list([]) = [].
process_data_list([data(X) | Xs]) = [X | process_data_list(Xs)].

main(!IO) :-
    % Creamos una lista de 10 elementos
    DataList = create_data_list(10),
    % Procesamos la lista
    IntList = process_data_list(DataList),
    % Imprimimos la lista procesada
    io.write_list(IntList, ", ", io.write_int, !IO),
    io.nl(!IO),
    % En este punto, DataList y IntList ya no son necesarios y el recolector de basura
    % se encargará de liberar la memoria asociada a estas estructuras.
    io.write_string("Memory has been managed automatically by the garbage collector.", !IO),
    io.nl(!IO).
INFO