【发布时间】:2021-12-26 05:14:45
【问题描述】:
prefix :: String -> String -> Bool
prefix [] _ = True
prefix _ [] = False
prefix (x:xs) (y:ys) = (x == y) && (prefix xs ys)
我有这个 Haskell 函数,我们在其中检查第一个字符串是否是另一个字符串的前缀。
有些东西我真的不明白。
为什么前缀 [] _ 为真?为什么反过来又是错误的呢? 我的意思是,如果两者都是空的,难道没有什么是无的前缀吗?
另外,我是否了解该功能如何正常工作?
我们从第一个字符串中取出第一个符号,然后从第二个字符串中取出第一个符号,看看它们是否相等,然后我们调用相同的函数,字符串短一个字符?
另外,我们使用前缀实现来创建一个函数 substring 来检查一个字符串是否是另一个字符串的一部分
substring :: String -> String -> Bool
substring x y
| length x > length y = False
| otherwise = prefix x y || substring x (tail y)
我也无法理解 substring 函数的一般工作原理。为什么长度x大于y一定是前缀?
【问题讨论】:
-
我投票结束这个问题,因为问题已被破坏
-
@MichaelLitchard 这不是关闭的理由。只需还原。
标签: haskell functional-programming