私はHaskellでプログラムすることを自分自身に教えており、検索機能に取り組んでいます。"hello"
これは、となどの2つの文字列を取り、に表示される"he"
回数をカウントします。"he"
"hello"
検索関数は、単語がリストで見つかった回数など、関数の開始時に入力する必要のないいくつかのことを追跡する必要があります。そこで、関数を2つの小さな関数に分割しました。1つはユーザーが最初にデータを入力し、次にデータを2番目の関数に転送して作業を行います。
これが私のコードです:
search :: (Eq a) => [a] -> [a] -> Integer
search [] _ = 0
search _ [] = 0
search x y = search1 x y y 0
search1 :: (Eq a) => [a] -> [a] -> [a] -> Integer -> Integer
search1 _ _ [] n = n
search1 x [] z n = search1 x z z (n+1)
search1 [] _ _ n = n
search1 (x:xs) (y:ys) z n
| x == y = search1 xs ys z n
| otherwise = search1 xs (y:ys) z n
search1
その中で、ユーザーが入力するために冗長になるデータを必要とする関数から始める代わりに、ユーザーのためsearch
にデータを「プラグイン」する関数を作成しsearch1
ました。
私の質問は、冗長データを「プラグイン」する関数をHaskellで作成することは良い習慣ですか?それとも私は何か違うことをすべきですか?