Erlang: cómo comprobar si todos los elementos de una lista de tuplas existen en otra lista de tuplas
Digamos que tengo dos listas: AmountOfProducts que tiene una lista de tuplas como
[ {manzana, 10}, {chocolate, 13}, {lechuga, 9}, {mango, 20} ]
Y la segunda lista es OrderProducts que tiene tuplas como
[ {manzana, 3}, {chocolate, 1}, {mango, 4} ]
El primer elemento es el átomo para el nombre del producto, el segundo elemento es la cantidad, para AmountOfProducts la cantidad es el número disponible y para OrderProducts es la cantidad que está pidiendo. ¿Hay alguna manera de comprobar si todos los átomos de OrderProducts existen dentro de AmountOfProducts y devolver un verdadero? ¿Y si, digamos, OrderProducts tuviera una tupla extra y su átomo no existiera dentro de AmountOfProducts para devolver falso? La idea es algo como esto:
AmountOfProducts = [ {manzana, 10}, {chocolate, 13}, {lechuga, 9}, {mango, 20} ]
OrderProducts = [ {manzana, 3}, {chocolate, 1}, {mango, 4} ]
check_products(AmountOfProducts, OrderProducts) ->
si
todos los átomos dentro de OrderProducts existen en AmountOfProducts -> verdadero;
uno o muchos de los átomos dentro de OrderProducts no existen en AmountOfProducts -> falso
fin.
En el caso dado de las dos listas, debería regresar verdadero. ¿Hay alguna manera de hacer esto? ¡Espero que esto tenga sentido! ¡Gracias!
davy.ai
Sí, hay una manera de verificar si todos los átomos de OrderProducts existen dentro de AmountOfProducts y devolver
verdadero
. Aquí está la posible solución utilizando Erlang:Esta función toma dos parámetros,
AmountOfProducts
yOrderProducts
, y primero obtiene una lista de solo los nombres de los productos deAmountOfProducts
utilizandolists:map/2
. Luego recorre cada pedido enOrderProducts
y verifica si su nombre de producto existe en la listaProductos
obtenida deAmountOfProducts
. Si todos los productos enOrderProducts
existen enAmountOfProducts
, devuelveverdadero
, de lo contrario devuelvefalso
. Al final, la función completa se ve así:Para usar la función, puede llamarla así:
Esto devolverá
verdadero
. Si agrega un pedido adicional de un producto que no existe enAmountOfProducts
como este:luego llamar
check_products/2
devolveráfalso
.