102、定义一个名为 first - sublist - match 的过程,该过程接收两个列表,一个模式列表和一个文本列表,返回文本中与模式匹配的子列表开始的最小位置;如果不存在这样的位置,则返回 #f。该过程应在计算出该值后立即返回,无需检查文本中的后续位置。
以下是实现 first-sublist-match 过程的代码:
(define (first-sublist-match pattern text)
(let ((last-position (- (length text) (length pattern))))
((rec (searcher start)
(cond
((> start last-position) #f)
((matches-prefix? pattern (list-tail text start)) start)
(else (searcher (+ start 1)))))
0)))
此代码中,首先计算出文本中可能匹配的最后位置。接着使用递归的 searcher 过程从文本起始位置开始检查。若当前位置超出最后可能匹配的位置,返回 #f ;若当前位置开始的子列表与模式匹配,返回该位置;否则,继续检查下一个位置。
103、对于模式 (list ’alpha ’beta ’gamma ’delta ’alpha ’beta ’gamma ’alpha ’beta ’alpha),这里的前缀函数指模式串中每个位置之前的子串的最长公共前后缀长度。手动计算从 0 到 10 的自然数作为参数对应的前缀函数值。
需通过如下步骤计算:
- 对于 0,前缀为空串,最长公共前后缀长度为 0。
- 从 1 开始,依次计算每个位置之前子串的最长公共前后缀长度。
例如:

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



