Cum pot folosi harta corect în Haskell

0

Problema

Eu sunt încercarea de a face un program, care să ia o scrisoare și se transformă, care scrisoarea în codul Morse. Morse masă este dat, precum și charToCode :: [(Char, String)] -> Char -> String

Am, de asemenea, trebuie să utilizați de căutare și fromJust formă de Date.Poate să facă acest lucru. La compilarea primesc urmatoarea eroare:

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)

Nu trebuie să utilizați harta de Preludiu. Aici este codul meu de până acum:

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 este o anumită funcție, nu pot face modificări la ea, fie.

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

Cel mai bun răspuns

1

Tu nu ar trebui să folosească map. Rezultatul lookup a f este un Maybe String, nu o listă de Maybe Strings.

Ai astfel posibilitatea să utilizați fromJust cu:

import Data.Maybe(fromJust)

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

Acestea fiind spuse, folosind fromJust este nesigur: nu ia în considerare faptul că lookup a f s-ar putea reveni un Nothing.

2021-11-20 12:14:24

Am facut asta prima data, dar mentorul meu a refuzat, din păcate, pentru că trebuie să folosească o mai mare funcție într-un fel. Ea a sugerat funcția hartă
Myxy290

@BarnaMikler: cred că acest lucru este mai mult pentru că te folosești lookupși pentru că fromJust este de unii nu este considerat bun cod de proiectare: se va eroare în caz lookup nu găsi nimic.
Willem Van Onsem

Aici este descrierea exercitiului(tradus aproximativ): "Scrie o funcție care are un caracter și cu ajutorul morseTab se transformă în cod morse. Se poate presupune, că personajul este în morseTab masă. Folosiți o mai mare funcție (harta). (Ajutor: pe internet, să văd ce-căutare și fromJust face) charToCode :: [(Char, String)] -> Char -> String". De asta mă simt ca și cum am avea de a utiliza harta,căutare și fromJust :/
Myxy290

@BarnaMikler: veți avea nevoie pentru a utiliza harta pentru a traduce un întreg șir în morse...
Willem Van Onsem

În alte limbi

Această pagină este în alte limbi

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