所以我有一个任务 写一个函数
search_string:: String -> String -> Integer
search_string mainstring substring = ...
接受两个字符串参数mainstring和substring,并检查子字符串是否作为mainstring的子字符串出现。如果是这样,函数应计算子字符串开始的mainstring中的位置。如果子串出现多次,则应该计算第一次出现的位置。如果mainstring中没有出现子字符串,则函数应该计算-1
。
所以这是我目前的代码:
search_string main sub = if sub == take (length sub) main then 0 else search_string_aux main sub 1
search_string_aux main sub n = if sub == search_string (drop n main) sub then n else search_string_aux main sub (n+1)
当我尝试加载时,haskell告诉我:
Labb4hs:11:79:
Couldn't match expected type '[a0]' with actual type 'Int'
In the expression : n
In the expression:
If sub == search_string (drop n main) sub then n
else search_string_aux main sub (n+1)
In an equation for `search_string_aux':
search_string_aux main sub n = if sub == search_string (drop n main) sub then n
else search_string_aux main sub (n+1)
所以似乎Haskell认为n应该是[a0] =(string ???)
,其实际类型为Int
,我想让n
成为Int
,所以我不知道为什么哈斯克尔认为这是[a0]
。很高兴能得到一些帮助,因为我是Haskell的新手和一般的编程,我对如何解决它没有任何线索。
答案 0 :(得分:3)
尝试向search_string_aux
添加类型签名。这将使错误更容易找到。
if sub == search_string
...但是等等,search_string
还没有Integer
?然而,sub
意味着String
......有些东西不在这里。