Bueno, necesitas resolver algunos pequeños problemas. El problema tal como se describe no es imperativo en absoluto (a menos que los pasos 1 y 3 involucren algún tipo de IO en lugar de simplemente darse).
* Realice cualquier normalización de una oración de entrada (normalice mayúsculas, minúsculas o coaccione caracteres no alfanuméricos a delimitadores)
* Tokenizar una oración normalizada (dividida en cada palabra)
* Convierta una lista de estos tokens (palabras) en una estructura de datos eficiente para su algoritmo de coincidencia (un Conjunto)
* Calcular el tamaño de la intersección para dos conjuntos
* Calcular el par máximo (puntaje, oración) dada una lista de ellos
Estas son una o dos líneas cada una en Haskell, y no debería necesitar usar más allá de Prelude, Data.Char, Data.Set y quizás Data.List. Suena sospechosamente como tarea, por lo que no voy a proporcionarle ningún código aquí, pero debería poder hacerlo en aproximadamente 20 líneas (incluida una cantidad razonable de espacios en blanco, pero no comentarios).
- ¿Cómo funciona el enhebrado en Ruby 2.0 y cómo es diferente de Ruby 1.9.2?
- ¿Cuáles son algunos sitios web grandes creados con lenguajes de programación funcionales?
- ¿Cuáles son los lenguajes de programación necesarios para construir software y otras cosas esenciales?
- Cómo escribir un código hermoso
- ¿Cómo hace una empresa de servicios de TI, que acaba de ingresar a IOT, hace un análisis de ROI y decide qué caso de uso seguir?
Tenga en cuenta que el algoritmo propuesto anteriormente es equivalente, pero no funciona exactamente de la misma manera que ha descrito, ya que las oraciones completas se comparan de manera eficiente usando la intersección de Set en lugar de hacerlo palabra por palabra.
Si quieres practicar tu Haskell, te sugiero que pruebes el ejercicio. Como sus envíos reciben una revisión del código, debe aprender cómo se ve el código más idiomático con bastante rapidez. Hay algunos problemas similares (pero no idénticos) a esto allí.