繁体   English   中英

递归 Haskell 函数的静态结果?

[英]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进行比较。 在你的学习材料中查找letwhere ,它们会有所帮助。 我认为这是一项任务,这就足够了。

不要固定您对类型签名的想法,您也可以在函数内部定义函数

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM