[英]Static result in a recursive Haskell function?
我是 Haskell 编程的初学者,并获得了创建一个函数的任务,该函数检查给定的字符串是否是另一个字符串的子字符串,如果是,则返回子字符串在主字符串中的位置。 这是我到目前为止:
findString :: String -> String -> Integer
findString mainstring substring
| length substring > length mainstring = (-1)
| take (length substring) mainstring == substring = 0
| otherwise = 1 + findString (drop 1 mainstring) substring
此分配的说明明确指出我必须使用findString :: String -> String -> Integer
并且如果子字符串不是主字符串的子字符串,它应该返回(-1)
。 现在函数的递归部分会干扰| length substring > length mainstring = (-1)
的结果。 | length substring > length mainstring = (-1)
通过为每次递归向其添加+1
但我只想要一个静态(-1)
。 我觉得我离这里很近了,但我已经在这个问题上呆了很长一段时间了。 任何帮助,将不胜感激!
而不是只做otherwise = 1 + findString (drop 1 mainstring) substring
,首先将值与-1
进行比较。 在你的学习材料中查找let
和where
,它们会有所帮助。 我认为这是一项任务,这就足够了。
不要固定您对类型签名的想法,您也可以在函数内部定义函数
findString :: String -> String -> Integer
findString mainstring substring = helper mainstring substring 0
where
helper mainstring substring len
| length substring > length mainstring = (-1)
| take (length substring) mainstring == substring = len
| otherwise = helper (drop 1 mainstring) substring (len + 1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.