Haskell'de haritayı nasıl doğru kullanabilirim

0

Soru

Bir mektup alıp o mektubu Mors alfabesine dönüştüren bir program yapmaya çalışıyorum. Mors tablosu yanı sıra verilir charToCode :: [(Char, String)] -> Char -> String

Ayrıca lookup ve fromsadece form Verilerini kullanmalıyım.Belki bu işi halletmek için. Derlendikten sonra aşağıdaki hatayı alıyorum:

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)

Başlangıçtaki haritayı kullanmalıyım. İşte şimdiye kadarki kodum:

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 belirli bir işlevdir, ben de değişiklik yapamam.

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

En iyi cevabı

1

Kullanmamalısınız map. Sonucu lookup a f is a Maybe String değil listesi Maybe Strings.

Bu şekilde kullanabilirsiniz fromJust ile:

import Data.Maybe(fromJust)

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

Olduğu söyleniyor, kullanarak fromJust güvensiz: bunu hesaba katmaz lookup a f geri dönebilir Nothing.

2021-11-20 12:14:24

Bunu ilk kez yaptım, ama akıl hocam maalesef reddetti, çünkü bir şekilde daha yüksek bir işlev kullanmak zorundayım. Harita işlevini önerdi
Myxy290

@BarnaMikler: bence bu daha çok kullandığınız için lookup ve çünkü fromJust bazıları tarafından iyi kod tasarımı olarak kabul edilmez: bu durumda hata olur lookup bir şey bulamaz.
Willem Van Onsem

İşte alıştırmanın açıklaması(kabaca çevrilmiş): "Bir karakter alan bir işlev yazın ve morseTab yardımıyla onu mors koduna dönüştürür. Karakterin morseTab tablosunda olduğunu varsayabilirsiniz. Daha yüksek bir işlev (harita) kullanın. (Yardım: internette, aramanın ne olduğunu görün vesaDece yap) charToCode :: [(Char, String)] - > Char - > > String". Bununla map,lookup ve fromJust kullanmam gerektiğini hissediyorum: /
Myxy290

@BarnaMikler: tüm bir dizeyi mors alfabesine çevirmek için map kullanmanız gerekir...
Willem Van Onsem

Diğer dillerde

Bu sayfa diğer dillerde

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