You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Haskell中prefix前缀判断与substring子串判断函数的相关疑问

关于Haskell prefix与substring函数的疑问解答

prefix函数疑问解答

问题1:模式匹配返回值设计逻辑

Haskell的函数模式匹配会从上到下依次匹配,当两个入参均为空字符串时,会优先匹配到第一个分支prefix [] _,直接返回True,完全符合「空字符串是空字符串的前缀」的定义,不存在逻辑冲突。
该分支设计严格遵循字符串前缀的通用定义:

  • 空字符串是任意字符串的前缀,所以只要第一个参数为空,不管第二个参数是什么都返回True
  • 第二个分支prefix _ []仅会在「第一个参数非空,第二个参数为空」的场景下触发,非空字符串不可能是空字符串的前缀,因此返回False

问题2:执行逻辑理解是否正确

你的理解完全正确。prefix的完整执行逻辑为:

  1. 优先处理边界情况:待判断前缀为空直接返回True,原字符串为空但前缀非空直接返回False
  2. 边界条件未触发时,取出两个字符串的首字符判断是否相等,若相等则递归对两个字符串的剩余部分重复上述判断

substring函数疑问解答

问题1:整体运行逻辑

该函数实现的是滑动窗口检查子串的逻辑:

  1. 首先做边界校验:如果待检查子串x的长度大于原字符串y,直接返回False
  2. 边界校验通过后,先判断x是不是当前y的前缀:如果是直接返回True
  3. 如果不是前缀,就把y去掉首字符得到新的字符串,递归调用substring检查x是不是新字符串的子串
    相当于每次把检查窗口向后滑动一位,直到匹配到前缀,或者y被缩短到比x短为止。

问题2:x长度大于y时直接返回False的原因

子串的定义是原字符串中连续的一段字符,它的长度不可能超过原字符串的总长度。这一步是提前剪枝,既符合子串的基本逻辑,也能避免不必要的递归调用,提升运行效率。


内容的提问来源于stack exchange,提问作者Quin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:15:05