haskell-タイプ '(Char、Int)'と '[Char]'エラーを一致させることができませんでした

vucko95

文字列を展開する関数を書いています

例:

foo "a4b4"

返す必要があります:

"aaaabbbb"

これが私のコードです:

foo :: String -> String
foo (x:xs) = let curent = fooHelp(x, read $ charToString( xs !! 0  ) :: Int)
             in x : (curent) ++ foo (tail xs)

fooHelp:

fooHelp :: String -> Int -> String
fooHelp x n 
             | n >= 3 = x ++ fooHelp x (n - 1) 
             | n == 2 = x
             | n == 1 = ""

およびcharToString:

charToString :: Char -> String
charToString c = [c]

xを取り、それを現在の値に追加します。現在のfooHelpでは、展開された文字列が返されます

例は:foo "a4b4"その後x = "a"xs = "4b4"xs !! 0 = '4' read $ charToString( xs !! 0 ) :: Int)文字を変換します'4'intに4し、Xと一緒fooHelpにそれを渡す(「」) - >fooHelp(x, 4)と「AAA」をお返し。その後、x : current戻って与えるべきで"aaaa"あるためx = "a"、現在"aaa"で、次いで再帰呼び出し++ foo tail xsところxs ="b4"、それはプロセスを繰り返す必要があります。

エラーが発生します:

test.hs:173:34: error:
    • Couldn't match type ‘(Char, Int)’ with ‘[Char]’
      Expected type: String
        Actual type: (Char, Int)
    • In the first argument of ‘fooHelp’, namely
        ‘(x, read $ charToString (xs !! 0) :: Int)’
      In the expression:
        fooHelp (x, read $ charToString (xs !! 0) :: Int)
      In an equation for ‘curent’:
          curent = fooHelp (x, read $ charToString (xs !! 0) :: Int)
    |
173 | foo (x:xs) = let curent = fooHelp(x, read $ charToString( xs !! 0  ) :: Int)
    |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

どこで間違えたの?関数fooHelpをテストしましたが、fooのような引数で正常に動作します。

fooHelpのテスト:

xs = "4b4"

test =  read $ charToString( xs !!0 ) :: Int

*Main> test
4
ウィレムヴァンオンセム

古典的な間違いは、のような関数を呼び出すことf (x1, x2)です。Haskellでは、関数には1つのパラメーターがあり、多くの場合、これはタプルではありません

あなたのfooHelper関数はタイプがあります。

fooHelp :: String -> (Int -> String)

したがって、これはStringを受け取る関数であり、IntsをStringsにマップする関数を返しますしたがって、次のような関数を呼び出す必要があります。

(fooHelp x) (read $ charToString( xs !! 0  ) :: Int)

以下の冗長性:

(fooHelp x) (read $ charToString( xs !! 0  ) :: Int)

しかし、今でも型は一致していません:xは、CharではなくString、次のようにリストでラップできます。

fooHelp [x] (read $ charToString( xs !! 0  ) :: Int)

お気に入り:

foo :: String -> String
foo (x:xs) = let curent = fooHelp [x] (read $ charToString( xs !! 0  ) :: Int)
             in x : (curent) ++ foo (tail xs)

しかし、それでもこの関数には問題があります。文字列を反復処理するため、最終的には空の文字列に到達し、fooその場合はありません。その場合、次のように空の文字列を返す必要があります。

foo :: String -> String
foo (x:xs) = let curent = fooHelp [x] (read $ charToString( xs !! 0  ) :: Int)
             in x : (curent) ++ foo (tail xs)
foo [] = ""

しかし、それはまだあまりエレガントではありません。ここでは、文字を文字列にラップするなど、多くの不要な操作を実行します。

このreplicate :: Int -> a -> [a]関数を使用して、文字を指定された回数繰り返すことができます。例えば:

Prelude> replicate 3 'a'
"aaa" 

さらに、このdigitToInt :: Char -> Int関数は、対応するInt:に数字を解析できます

Prelude Data.Char> digitToInt '3'
3 

したがって、ここでは、これら2つを使用replicate (digitToInt k) xして、文字列の最初の2文字を取得し、xsiが要求された時間を繰り返した文字列を生成し、次のように文字列の残りの部分で再帰を実行できます。

import Data.Char(digitToInt)

foo :: String -> String
foo (x:k:xs) = replicate (digitToInt k) x ++ foo xs
foo _ = ""

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Haskellタイプエラー「タイプ `Char 'と` t0 [Char]'を一致させることができませんでした」

分類Dev

Haskell:タイプ `[Char] 'と` Char'を一致させることができませんでした

分類Dev

Haskellは期待される型 '[(Char、b0)]'を実際の型 '(Char、Int)'と一致させることができませんでした

分類Dev

タイプ「[Char]」を「Data.Text.Internal.Text」と一致させることができませんでした

分類Dev

タイプ `[Char] 'と` Value'を一致させることができませんでした

分類Dev

Haskell-タイプ `(Int、Integer) 'を` Pos'と一致させることができませんでした

分類Dev

Haskell:エラー:タイプ「[]」を「IO」と一致させることができませんでした

分類Dev

予期されたタイプ `[Char] 'を実際のタイプ` a'と一致させることができませんでした

分類Dev

Haskellプログラミング割り当て、「期待される型「Int」を実際の型「[a0]-> Int」と一致させることができませんでした」およびその他のいくつかのエラー

分類Dev

Haskell-タイプ「PersistEntityBackendrecord0」を「SqlBackend」と一致させることができませんでした

分類Dev

Haskellはタイプ `[] 'を` IO'と一致させることができませんでした

分類Dev

Haskell-タイプ[]をIOと一致させることができませんでした

分類Dev

期待される型 `Maybe(String、Int、String) 'を実際の型`([Char]、t0、[Char])'と一致させることができませんでした

分類Dev

Haskell:タイプを一致させることができませんでしたか?

分類Dev

Haskell howManyAboveAverageがタイプエラーと一致しませんでした

分類Dev

候補テンプレートが無視されました:「consttype-parameter-0-0 *」を「char」と一致させることができませんでした

分類Dev

期待される型 'x'を実際の型 `([Char]、[Char]、[Char]) 'と一致させることができませんでした

分類Dev

Haskell、Control.Lens:タイプ「[Language.Haskell.TH.Syntax.Dec]」を「Language.Haskell.TH.Syntax.Exp」と一致させることができませんでした

分類Dev

Haskell、Control.Lens:タイプ「[Language.Haskell.TH.Syntax.Dec]」を「Language.Haskell.TH.Syntax.Exp」と一致させることができませんでした

分類Dev

Haskell readFile:期待されるタイプ '[String]'を実際のタイプ 'IOString'と一致させることができませんでした

分類Dev

Haskell:期待されるタイプ「a1」を実際のタイプ「a」と一致させることができませんでした

分類Dev

Haskellは期待されるタイプ「ItemNat」を実際のタイプ「()」と一致させることができませんでした

分類Dev

haskellは期待されるタイプを実際のタイプ 'Bool'と一致させることができませんでした

分類Dev

Haskell '期待されるタイプと実際のタイプを一致させることができませんでした'

分類Dev

Haskellで「期待されるタイプIOa0をintと一致させることができなかった」を修正する方法は?

分類Dev

Haskellエラーで期待されるタイプと一致しませんでした

分類Dev

gtk2hs:予期されたタイプ 'IO [Int]'を実際のタイプ '[Int]'と一致させることができませんでした

分類Dev

期待されるタイプ '(Int, Int)' を実際のタイプ '[t0]' と一致させることができませんでした

分類Dev

期待されるタイプ 'a-> Int'を実際のタイプ 'IOArrow StringInt'と一致させることができませんでした

Related 関連記事

  1. 1

    Haskellタイプエラー「タイプ `Char 'と` t0 [Char]'を一致させることができませんでした」

  2. 2

    Haskell:タイプ `[Char] 'と` Char'を一致させることができませんでした

  3. 3

    Haskellは期待される型 '[(Char、b0)]'を実際の型 '(Char、Int)'と一致させることができませんでした

  4. 4

    タイプ「[Char]」を「Data.Text.Internal.Text」と一致させることができませんでした

  5. 5

    タイプ `[Char] 'と` Value'を一致させることができませんでした

  6. 6

    Haskell-タイプ `(Int、Integer) 'を` Pos'と一致させることができませんでした

  7. 7

    Haskell:エラー:タイプ「[]」を「IO」と一致させることができませんでした

  8. 8

    予期されたタイプ `[Char] 'を実際のタイプ` a'と一致させることができませんでした

  9. 9

    Haskellプログラミング割り当て、「期待される型「Int」を実際の型「[a0]-> Int」と一致させることができませんでした」およびその他のいくつかのエラー

  10. 10

    Haskell-タイプ「PersistEntityBackendrecord0」を「SqlBackend」と一致させることができませんでした

  11. 11

    Haskellはタイプ `[] 'を` IO'と一致させることができませんでした

  12. 12

    Haskell-タイプ[]をIOと一致させることができませんでした

  13. 13

    期待される型 `Maybe(String、Int、String) 'を実際の型`([Char]、t0、[Char])'と一致させることができませんでした

  14. 14

    Haskell:タイプを一致させることができませんでしたか?

  15. 15

    Haskell howManyAboveAverageがタイプエラーと一致しませんでした

  16. 16

    候補テンプレートが無視されました:「consttype-parameter-0-0 *」を「char」と一致させることができませんでした

  17. 17

    期待される型 'x'を実際の型 `([Char]、[Char]、[Char]) 'と一致させることができませんでした

  18. 18

    Haskell、Control.Lens:タイプ「[Language.Haskell.TH.Syntax.Dec]」を「Language.Haskell.TH.Syntax.Exp」と一致させることができませんでした

  19. 19

    Haskell、Control.Lens:タイプ「[Language.Haskell.TH.Syntax.Dec]」を「Language.Haskell.TH.Syntax.Exp」と一致させることができませんでした

  20. 20

    Haskell readFile:期待されるタイプ '[String]'を実際のタイプ 'IOString'と一致させることができませんでした

  21. 21

    Haskell:期待されるタイプ「a1」を実際のタイプ「a」と一致させることができませんでした

  22. 22

    Haskellは期待されるタイプ「ItemNat」を実際のタイプ「()」と一致させることができませんでした

  23. 23

    haskellは期待されるタイプを実際のタイプ 'Bool'と一致させることができませんでした

  24. 24

    Haskell '期待されるタイプと実際のタイプを一致させることができませんでした'

  25. 25

    Haskellで「期待されるタイプIOa0をintと一致させることができなかった」を修正する方法は?

  26. 26

    Haskellエラーで期待されるタイプと一致しませんでした

  27. 27

    gtk2hs:予期されたタイプ 'IO [Int]'を実際のタイプ '[Int]'と一致させることができませんでした

  28. 28

    期待されるタイプ '(Int, Int)' を実際のタイプ '[t0]' と一致させることができませんでした

  29. 29

    期待されるタイプ 'a-> Int'を実際のタイプ 'IOArrow StringInt'と一致させることができませんでした

ホットタグ

アーカイブ