我正在自学在 Haskell 中编程,并且正在开发一个查找功能。它的作用是接受两个字符串,例如"hello"
and "he"
,并计算"he"
在 中出现的次数"hello"
。
find 函数需要跟踪一些不需要在函数开始时输入的内容,例如在列表中找到单词的次数。所以,我把这个函数分解成两个更小的函数:一个是用户最初输入数据的函数,然后将数据引导到第二个函数来完成这项工作。
这是我的代码:
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 中创建一个“插入”冗余数据的函数是一种好习惯吗?还是我应该做一些不同的事情?