我如何可以使用正确映在Haskell

0

的问题

我在尝试做一个程序,即需要一封信,并把这封信成为 莫尔斯电码. 莫尔斯电表给定,以及 charToCode :: [(Char, String)] -> Char -> String

我还必须使用 的查找fromJust 形式的数据。也许,使这项工作。 在汇编收到的以下错误:

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)

使用的地图的前奏。 这里是我的代码迄今为止:

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是一个特定功能,我不能改变它。

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

最好的答案

1

你不应该使用 map. 结果的 lookup a f 是一个 Maybe String不列表 Maybe Strings.

因此,你可以使用 fromJust 有:

import Data.Maybe(fromJust)

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

这就是说,使用 fromJust 是不安全的:它没有考虑到这 lookup a f 可能返回 Nothing.

2021-11-20 12:14:24

我这样做是第一次了,但我的导师拒绝它遗憾的是,因为我必须用更高的功能以某种方式。 她建议在地图的功能
Myxy290

@BarnaMikler:我认为这更多的是因为你使用 lookup,而是因为 fromJust 是由一些不被认为是良好的代码设计的:它将错误的情况下 lookup 没有找到任何东西。
Willem Van Onsem

这里是描述的演习(大致翻译):"编写一个函数,需要一个角色,并借助morseTab事实证明它成为莫尔斯电码。 你可以假设,即该文字是在morseTab表。 使用更高的功能(地图)。 (帮助:在互联网上,看到什么样的查找和fromJust做)charToCode::[(Char,String)]->Char->String"。 通过这个,我感觉我必须利用地图,查找和fromJust:/
Myxy290

@BarnaMikler:你将需要使用地图来翻译整个串入莫尔斯...
Willem Van Onsem

其他语言

此页面有其他语言版本

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