Jak mohu používat mapu správně v jazyce Haskell

0

Otázka

Snažím se udělat program, který bere dopis a ukázalo se, že dopis do morseovy abecedy. Morse je uvedena tabulka, stejně jako charToCode :: [(Char, String)] -> Char -> String

Také jsem musel použít vyhledávání a fromJust Dat formuláře.Možná, aby to fungovalo. Při sestavování jsem se zobrazit následující chyba:

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)

mám použít mapy z Předehrou. Tady je můj kód tak daleko:

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 je danou funkci, nemůžu udělat změny, aby to buď.

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

Nejlepší odpověď

1

Neměli byste používat map. Výsledek lookup a f je Maybe Stringne seznam Maybe Strings.

Můžete tak použít fromJust s:

import Data.Maybe(fromJust)

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

To bylo řečeno, pomocí fromJust je nebezpečné: nebere v úvahu, že lookup a f možná vrátit Nothing.

2021-11-20 12:14:24

Udělal jsem to poprvé, ale můj učitel odmítl, že bohužel, protože mám vyšší funkci nějak. Ona navrhla, mapa funkce
Myxy290

@BarnaMikler: myslím, že je to více, protože budete používat lookupa protože fromJust je to tím, že někteří nepovažují za dobrou kód design: to bude chyba v případě lookup není nic najít.
Willem Van Onsem

Tady je popis cvičení(volně přeloženo): "Napište funkci, která má charakter a s pomocí morseTab nakonec se ukázalo, že do morseovy abecedy. Můžete předpokládat, že postava je v morseTab stolu. Použití vyšší funkce (map). (Nápověda: na internetu, vidět, co se vyhledávání a fromJust) charToCode :: [(Char, String)] -> Char -> String,". Tímto jsem pocit, jako bych měl používat mapy,vyhledávání a fromJust :/
Myxy290

@BarnaMikler: budete muset použít mapu přeložit celý řetězec do morse...
Willem Van Onsem

V jiných jazycích

Tato stránka je v jiných jazycích

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