次の機能があるとします。
--count number of an item in a list
count :: (Eq a) => a -> [a] -> Double
count x [] = 0.0
count x (y:ys) = (is x y) + count x ys
と
--returns 1 if items match, else 0
is :: (Eq a) => a -> a -> Double
is x y
| x == y = 1.0
| otherwise = 0.0
と
--compute length of the list
len :: [a] -> Double
len [] = 0.0
len [x] = 1.0
len (x:xs) = 1.0 + len xs
このメソッドを使用して、正規化されたカウントを生成する関数を生成したいと思います。
--generates frequency of item in list
ncount :: (Eq a) => a -> [a] -> Double
ncount x [] = 0.0
ncount x y = norm * (count x y)
where
norm = 1.0 / len y
この場合の署名がどのように処理されるべきかを知りたいだけです。count
署名(Eq a) => a -> [a] -> Double
がありますが、それも必要ncount
ですか? 一方では、を呼び出すときにa
が含まれていない場合、後続の への呼び出しは失敗します。一方、等しいかどうかをテストすることはありません。Eq
ncount
count
ncount
申し訳ありませんが、省略しis
てlen
.:w