【发布时间】:2016-12-04 11:29:52
【问题描述】:
我正在尝试实现一个从给定流中递归删除所有额外空格的函数。应删除任何连续的空格,在单词之间留出一个最大空格。我无法弄清楚如何正确实现这一点。
我已经尝试将流转换为列表并以这种方式进行操作,但我根本无法根据我对每个元素的测试提供的内容,弄清楚如何构造一个新流并返回它。我曾尝试使用流映射,但在这种情况下它似乎对我不起作用(删除元素,构建新流)
这是我当前对 remove-extra-spaces 的错误实现:
(define remove-extra-spaces
(lambda (str)
(cond (not (not-more-than-one-space str 0) (stream-append (stream-first str) (remove-extra-spaces (stream-rest str))))
(else (remove-extra-spaces (stream-rest str)))
)))
(define not-more-than-one-space
(lambda (str count)
(cond ((stream-empty? str) #T)
((equal? (stream-first str) #\space) (not-more-than-one-space (stream-rest str) (+ count 1)))
((> count 1) #F)
(else #T)
)
))
我写了一个测试来帮助我找出何时有多个连续的空格。但是,我无法弄清楚如何使用这个测试来创建一个基于通过它的新流。当我尝试将 Stream-filter 与 stream-map 结合使用时,它对我不起作用。
【问题讨论】: