Ako môžem použiť mapu správne Gnome

0

Otázka

Snažím sa vytvoriť program, ktorý trvá list a zmení sa na tento list do morseovej abecedy. V Morse tabuľke je uvedené, ako aj charToCode :: [(Char, String)] -> Char -> String

Mám tiež použiť vyhľadávanie a fromJust Dát formulára.Možno pre túto prácu. Pri zostavovaní som sa zobraziť nasledujúce chybové hlásenie:

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)

Som si mapu používať z Predohra. Tu je môj kód doteraz:

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 daná funkcia, nemôžem robiť zmeny, aby to buď.

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

Najlepšiu odpoveď

1

Nemali by ste používať map. Výsledok lookup a f je Maybe Stringnie zoznam Maybe Strings.

Ste teda nemožno použiť fromJust s:

import Data.Maybe(fromJust)

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

Ako už bolo povedané, pomocou fromJust je nebezpečné: neberie do úvahy, že lookup a f môže vrátiť Nothing.

2021-11-20 12:14:24

Urobil som to prvý raz, ale môj mentor odmietol bohužiaľ, pretože musím použiť vyššiu funkciu nejako. Navrhla mapu funkcia
Myxy290

@BarnaMikler: myslím, že to je viac, pretože ste použiť lookupa pretože fromJust je tým, že niektoré nie sú považované za dobré kód dizajn: bude chyba v prípade lookup nenájde nič.
Willem Van Onsem

Tu je popis cvičenie(zhruba preložený): "Napíšte funkciu, ktorá trvá znak a s pomocou morseTab to stáča sa do morseovej abecedy. Môžete predpokladať, že charakter je v morseTab tabuľke. Použiť vyššiu funkciu (mapa). (Nápoveda: na internete, pozrite sa, čo lookup a fromJust robiť) charToCode :: [(Char, String)] -> Char -> String". Týmto mám pocit, že musím použiť mapa,vyhľadávanie a fromJust :/
Myxy290

@BarnaMikler: budete musieť použiť mapu preložiť celý reťazec do morse...
Willem Van Onsem

V iných jazykoch

Táto stránka je v iných jazykoch

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