2016-12-28 8 views
1

2つのリストを取ります。最初は文字のリスト、2番目は正の整数。この関数は、最初のリスト内の文字を、2番目のリスト内の同じ位置番号の回数だけ繰り返します。例:2つのリスト、2番目の正の整数、2番目のリストのそれぞれの数字で最初のリスト文字を繰り返します。

myCount ['a','b'] ['1','2'] => ['a','b','b'] 

私がこれまで持っているもの:

myCount :: [Char] -> [Int] -> [Char]  
myCount [] [] = [] 
myCount (x:xs) (y:ys) = replicate y x && myCount xs ys 

は、私が最初のリスト(x)はyの回から文字を複製して、再帰的にリスト全体のためにこれをやっています。 正しい方向のヘルプやポインターがあれば大丈夫です!

私のエラーは、次のとおりです。

mess.hs:10:43: error: 

* Couldn't match expected type `Bool' with actual type `[Char]' 
* In the second argument of `(&&)', namely `myCount xs ys' 
     In the expression: replicate y x && myCount xs ys 
     In an equation for `myCount': 
      myCount (x : xs) (y : ys) = replicate y x && myCount xs ys 
+2

としてこれを定義することができますどのようにこのために、 '&&'使用してのアイデアを思い付いたのですか?それは_logicalとoperator_です。 – leftaroundabout

+0

@leftaroundaboutは、リストが空になるまで関数を呼び出そうとしていましたが、前に使っていた別の関数でそれを使っていました。しかし、それは私の問題であるようです。 – Demostroyer

+0

ハスケルでは、 "_X_まで関数を呼び出す"ことは実際にはあまり意味がありません。あなたは誰が誰に電話をかけたかを考えませんが、どのように結果を見なければならないのでしょうか。 – leftaroundabout

答えて

3

どのようにあなたは、このために&&を使用してのアイデアを思い付いたのですか?これは論理演算子です。つまり、2つの真理値(Bool)を両方の辺が真の場合にのみTrueの値に結合します。

あなたが扱っているのはブール値ではなくリストです。 2つのリストをと組み合わせて、最初から始まりもう1つのリストに続くリストにしたいとします。 IOW、タイプが[Char] -> [Char] -> [Char]の関数が必要です。実際には、リストの要素がCharであることは重要ではありません。のいずれかののタイプを含むリストの場合は、[a] -> [a] -> [a]となるはずです。さて、あなたはhoogle thatすることができます! first result

(++) :: [a] -> [a] -> [a]      infixr 5 

    Append two lists, i.e., 

    [x1, ..., xm] ++ [y1, ..., yn] == [x1, ..., xm, y1, ..., yn] 
    [x1, ..., xm] ++ [y1, ...] == [x1, ..., xm, y1, ...] 

    If the first list is not finite, the result is the first list. 

いいですね。だから、これはあなたが書くしようとしている機能である:

replicates :: [Int] -> [a] -> [a] 
replicates (n:ns) (x:xs) = replicate n x ++ replicates ns xs 
replicates _ _ = [] 

また、あなたが

replicates ns = concat . zipWith replicate ns 
+0

OK、私はHaskellを新しくしていて、このタイプのものを説明するこのHoogleサイトがあることを知らなかった。 論理と演算子が両側で真を求めているという点で、私が持っている問題を解決する方法はありますか? – Demostroyer

+1

まあ、論理演算子_を使用しないでください! – leftaroundabout

+0

あなたは今何を意味するのですか。これとHoogleのサイトで助けてくれてありがとう! – Demostroyer

関連する問題