AnswerBun.com

Composición en Haskell

Stack Overflow en español Asked by Logan on January 13, 2021

Resolví este ejercicio en Haskell. Ahora lo tengo que hacer sin recursión, y usando composición de funciones predefinidas.

ConLongitud :: Int -> [String] -> Int
ConLongitud _ [] = 0
ConLongitud n (x:xs)
| n == length x = 1 + ConLongitud n xs
| otherwise = ConLongitud n xs

One Answer

Básicamente, lo que hace esta función es contar las cadenas que tienen una longitud especificada. Lo primero es filtrar la lista de cadenas a las que tengan la longitud buscada y luego contarlas:

conLongitud :: Int -> [String] -> Int
conLongitud n xs = length ys
  where ys = [x | for x in xs, length x == n]

Pero el problema te dice "composición de funciones". En lugar de usar una compresión de listas se podría usar filter, algo así:

ys = filter (n==) (map length xs)

Esta definición recorre la lista dos veces, una para calcular la longitud de todas las cadenas y otra vez para filtrar. Se puede hacer en un paso:

ys = filter (s -> n == length s) xs

O en pointfree:

ys = filter ((n==) . length) xs

Con ello obtendríamos la definición final:

conLongitud :: Int -> [String] -> Int
conLongitud n = length . filter ((n==) . length)

El contaje de elementos suele ser muy habitual. No existe una función estándar para ello, por lo que es habitual definir una:

count :: (a -> Bool) -> [a] -> Int
count pred = length . filter pred

conLongitud :: Int -> [String] -> Int
conLongitud n = count ((n==) . length)

Correct answer by ChemaCortes on January 13, 2021

Add your own answers!

Related Questions

Saber el tipo de datos de un campo de una tabla FireBird

1  Asked on November 7, 2021 by fernando-de-jesus-basurto

   

Crear un Archivo PDF de un Byte Array?

2  Asked on November 7, 2021 by mark-dev

     

Activar Select Box segun checkbox seleccionado

2  Asked on November 7, 2021 by maha1982

       

Usar entity framework con Base de datos existente

1  Asked on November 7, 2021 by miquel

   

hctreemap2 de dos niveles –> Error: Can’t subset columns that don’t exist

1  Asked on November 7, 2021 by alejandro-erazo-bolaos

     

Problema con controllers de MVC .NET

0  Asked on November 7, 2021 by jorge-gonzales

         

como mover botones de ruta en la pagina angular 8/9

1  Asked on November 7, 2021 by kenny-cifuentes

       

Consulta múltiples tablas con laravel eloquent

1  Asked on November 4, 2021 by erain-moya

       

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP, SolveDir