어떻게 사용할 수 있는 지도에서 올바르게 하스켈

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 fMaybe 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:나는 생각이 더 많기 때문에 당신은 사용 lookupfromJust 해 몇 가지 좋은 것으로 간주됩드 디자인이다:그것은 것입니다에서 오류 lookup 하지 않습니다.
Willem Van Onsem

여기에는 이 설명의 운동(대략 번역):"함수를 작성하는 캐릭터의 도움으로 morseTab 그것으로 모스 코드입니다. 가정할 수 있는 캐릭터가에 morseTab 테이블. 사용은 높은 함수(map). (도움말 인터넷,무 조회 및 fromJust do)charToCode::[(Char,String)]->Char->문자열". 이 내가 가지고있는 것 같은 느낌을 사용하지도,조회 및 fromJust:/
Myxy290

@BarnaMikler:을 사용해야 합니다 지도를 번역하는 전체 문자열 모스...
Willem Van Onsem

다른 언어로

이 페이지는 다른 언어로되어 있습니다

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