【问题标题】:Static result in a recursive Haskell function?递归Haskell函数的静态结果?
【发布时间】:2019-11-29 02:27:55
【问题描述】:

我是 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)。现在函数的递归部分通过在每次递归中添加+1 来干扰| length substring > length mainstring = (-1) 的结果,但我只想要一个静态(-1)。我觉得我在这里很近,但我已经坚持了很长一段时间了。任何帮助将不胜感激!

【问题讨论】:

    标签: string haskell


    【解决方案1】:

    不要只做otherwise = 1 + findString (drop 1 mainstring) substring,而是先将值与-1 进行比较。在您的学习资料中查找letwhere,它们会有所帮助。考虑到这是一项任务,我认为这就足够了。

    【讨论】:

      【解决方案2】:

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

      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)
      

      【讨论】:

      • 非常感谢!我在想这样的事情,一个用于计数的单独变量)只是不知道在haskell中会是什么样子。我真的不知道where 的语法,所以我得好好研究一下。
      猜你喜欢
      • 1970-01-01
      • 2011-02-14
      • 2019-02-28
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多