Jak mogę poprawnie korzystać z karty w Haskell

0

Pytanie

Staram się stworzyć program, który ma literę i zamienia tę literę alfabetu Morse ' a. Znajduje się tabela Morse ' a, a także charToCode :: [(Char, String)] -> Char -> String

Muszę też użyć szukaj i tylko dane formularza.Może być, aby to zadziałało. Podczas kompilacji otrzymuję następujący błąd:

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)

Nie musi korzystać z karty z gry wstępnej. Oto mój kod do tej pory:

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 jest zadana funkcja, ja też nie mogę wprowadzać w niej zmiany.

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

Najlepsza odpowiedź

1

Nie należy używać map. Wynik lookup a f to Maybe Stringa nie lista Maybe Strings.

W ten sposób można korzystać z fromJust z:

import Data.Maybe(fromJust)

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

Niemniej jednak, korzystając z fromJust niepewny: to nie bierze pod uwagę, że lookup a f może zwrócić Nothing.

2021-11-20 12:14:24

Zrobiłem to po raz pierwszy, ale mój mentor, niestety, zrezygnował z tego, bo muszę jakoś wykorzystać wyższą funkcję. Ona zaproponowała funkcję karty
Myxy290

@BarnaMikler: myślę, że to bardziej dlatego, że używasz lookupi dlatego, że fromJust według niektórych nie jest dobrym wzorem kodu: to doprowadzi do błędu w przypadku lookup nic nie znajduje.
Willem Van Onsem

Oto opis ćwiczenia(około tłumaczone): "Napisz funkcję, która przyjmuje symbol i z pomocą morseTab zamienia go w alfabet Morse' a. Można przypuszczać, że symbol znajduje się w tabeli morseTab. Użyj wyższą funkcję (mapę). (Pomoc: w Internecie zobacz, co trzeba zrobić, aby znaleźć i od) charToCode :: [(Symbol, wiersz)] -> Znak ->> Wiersz". Tym czuję,że muszę korzystać z mapy, szukaj i po prostu :/
Myxy290

@BarnaMikler: trzeba będzie korzystać z map do tłumaczenia całego ciągu znaków na alfabet Morse ' a...
Willem Van Onsem

W innych językach

Ta strona jest w innych językach

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