0

やあみんな、私は単語のリストを取り、それと同じようにリストを返すと思いますが、連続した単語として表示されるたびに次の置換が行われます。

一例はyou、それをに変換することですu

私は次のものを与えられます:

hep :: [Word] -> [Word]
type Word = String

今私に問題を与えているのは、コードを繰り返す必要がないようにケース式を使用しようとしていることですが、次のエラーが発生します

Couldn't match expected type `Char' with actual type `[Char]'
In the pattern: "You"
In a case alternative: "You" -> "u" : hep xs
In the expression: case a of { "You" -> "u" : hep xs }

次のコードから

hep [] = []
hep [a:xs] = case a of 
    "You" -> "u":hep xs

誰かが問題が何であるか教えてくれますか?

編集:

次のコードを追加しました

hep [] = [[]]
hep (a:xs) = case a of 
    "you" -> "u":hep xs
    "are" -> "r":hep xs
    "your" -> "ur":hep xs
    "boyfriend" -> "bf":hep xs
    "girlfriend" -> "gf":hep xs
    "great" -> "gr8":hep xs
    a -> a:hep xs

リストに2つまたは3つの特定の単語が順番に含まれている場合に、それを頭字語に変換できるように、ケースを追加するにはどうすればよいでしょうか。

["By","The","way"] = ["btw"]
4

2 に答える 2

3

文字列のリストのリストと照合しようとしていますが、のタイプhep[Word] -> [Word]、と矛盾しています。エラーメッセージはこの事実を参照しています。

でも、あなたが実際に欲しいのはこれだと思いますか?

hep [] = []
hep (a:xs) = case a of 
    "You" -> "u":hep xs
    a -> a:hep xs
于 2013-02-13T03:29:35.910 に答える
0

このようなもの?

"By" -> let (y:ys) = xs
        in if y=="The" && head ys=="Way"
              then "btw": hep (drop 2 xs)
              else a:hep xs

それを50回続けて書きたくはありませんが。これはどう?

import Data.List
import Data.Maybe

hep [] = []
hep (a:xs) = case a of 
              "you" -> "u":hep xs
              "are" -> "r":hep xs
              "your" -> "ur":hep xs
              "boyfriend" -> "bf":hep xs
              "girlfriend" -> "gf":hep xs
              "great" -> "gr8":hep xs
              "by" -> matchPhrase 3
              "see" -> matchPhrase 2
              a -> a:hep xs
            where matchPhrase num = 
                    let found = lookup (concat $ take num (a:xs)) phrase_list
                    in case found of
                        Just _ -> fromJust found : hep (drop num (a:xs)) 
                        Nothing -> a:hep xs

phrase_list = [("bytheway", "btw"), ("seeyou","cu")]
于 2013-02-13T04:24:55.813 に答える