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

如何为自定义Stream实现stream-filter函数(Racket语言)

自定义Racket Stream的stream-filter实现问题与解决

我正在通过《Schreibe dein Programm!》学习Racket语言,第9章练习要求自行实现Stream操作函数(不可使用内置Stream函数)。在实现stream-filter函数时遇到了两个问题:要么只能过滤流的第一个元素,要么程序直接无法终止。

自定义Stream定义

(define-record stream
  make-stream
  stream?
  (stream-first %a)
  (stream-rest-function (-> stream)))

stream-filter函数签名

(: stream-filter ((%a -> boolean) stream -> stream))

问题排查与解决

最初的实现只能处理流的第一个元素,当把过滤逻辑放到make-stream的rest分支时,又出现了程序无法终止的情况。后来才明确关键细节:自定义Stream的rest部分是无参函数,调用它需要加两层括号。基于这个点,最终写出了可行的实现(暂未完善空流处理逻辑)。

最终实现代码

(define stream-filter
  (lambda (condition str)
    (if (condition (stream-first str))
        (make-stream
         (stream-first str)
         (lambda () (stream-filter condition
                                   ((stream-rest-function str)))))
        (stream-filter condition ((stream-rest-function str))))))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:42:09