¿Cómo puedo utilizar el mapa correctamente en Haskell

0

Pregunta

Estoy tratando de hacer un programa, que toma una carta y se convierte en esa carta en código Morse. El Morse de la tabla, así como charToCode :: [(Char, String)] -> Char -> String

También tengo que usar de búsqueda y fromJust los Datos del formulario.Tal vez para hacer este trabajo. Al compilar me aparece el siguiente error:

Couldn't match expected type [Maybe Char]
            with actual type Maybe String
    * In the second argument of 'map', namely '(lookup a f)'
      In the expression: map (fromJust) (lookup a f)
      In an equation for 'charToCode':
          charToCode f a = map (fromJust) (lookup a f)

Me han de utilizar el mapa de Preludio. Aquí está mi código hasta el momento:

morseTab :: [(Char, String)]
morseTab = [('A', ".-"), ('B', "-..."), ('C', "-.-."), ('D', "-.."), ('E', "."), ('F', "..-."), ('G', "--."), ('H', "...."),('I', ".."), ('J', ".---"), ('K', "-.-"), ('L', ".-.."), ('M', "--"), ('N', "-."), ('O', "---"), ('P', ".--."), ('Q', "--.-"), ('R', ".-."), ('S', "..."), ('T', "-"), ('U', "..-"), ('V', "...-"), ('W', ".--"), ('X', "-..-"), ('Y', "-.--"), ('Z', "--..")]
charToCode :: [(Char, String)] -> Char -> String
charToCode f a = map (fromJust) (lookup a f)

morseTab es una función dada, yo no puedo hacer cambios para bien.

haskell higher-order-functions maybe
2021-11-20 12:09:47
1

Mejor respuesta

1

Usted no debe usar map. El resultado de lookup a f es un Maybe String, no una lista de Maybe Strings.

Usted lo puede usar fromJust con:

import Data.Maybe(fromJust)

charToCode :: [(Char, String)] -> Char -> String
charToCode f a = fromJust (lookup a f)

Dicho esto, el uso de fromJust es peligroso: no toma en cuenta que lookup a f puede devolver un Nothing.

2021-11-20 12:14:24

Yo lo hice la primera vez, pero mi padre se negó a hacerlo, por desgracia, porque tengo que usar una mayor función de alguna manera. Ella sugirió que la función de mapa de
Myxy290

@BarnaMikler: creo que esto es más debido a que el uso de lookupy porque fromJust es por que algunos no se considera un buen código de diseño: se va de error en caso de que lookup no encuentra nada.
Willem Van Onsem

Aquí está la descripción del ejercicio(aproximadamente traducido): "Escribir una función que toma un carácter y con la ayuda de morseTab se convierte en código morse. Se puede asumir, que el personaje está en la morseTab tabla. El uso de una mayor función (mapa). (Ayuda: en internet, ver lo que la búsqueda y fromJust hacer) charToCode :: [(Char, String)] -> Char -> String". Por esto me siento como que tengo que usar el mapa,búsqueda y fromJust :/
Myxy290

@BarnaMikler: usted tendrá que usar el mapa para traducir una cadena completa en morse...
Willem Van Onsem

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................