【问题标题】:Filtering non prime numbers out of a stream in Scheme从 Scheme 中的流中过滤非素数
【发布时间】:2015-05-04 12:27:06
【问题描述】:

我正在尝试在方案中定义一个过滤数字流的函数。我的函数将接受一个数字 num 和一个 stream s,并过滤掉 num 是流中数字的一个因子。

我的代码目前如下所示:

(define filter$
  (lambda (num s)
    (if (or (= num 0)(null? s))
        '()
        (if (= (modulo (car s) num) 0)
            (filter$ num (cdr s))
            (cons (car s) (filter$ num (cdr s)))))))

我目前收到一个错误:

car: contract violation
expected: pair?
given: #<procedure:... saved location of file/location of the error>

我正在为此在 Racket 工作(特别是 DrRacket),这是学校的工作。我希望在了解导致此错误的原因以及我能做些什么来修复它方面获得帮助。

【问题讨论】:

  • 您传递给filter$ 的哪些参数会产生此错误?

标签: filter stream scheme racket


【解决方案1】:

流与列表不同。您不能只使用car,因为car 仅适用于对。

即使您写道您正在使用 DrRacket,我也不知道您使用的是什么语言。通常它是学习语言,但在这个答案中,我假设它是 Racket 的默认语言或适当的 Scheme 报告语言。

#!racket 语言中,流的等价于first(或car)是stream-first。其余程序和特殊表格see the documentation.

对于 Scheme 语言(如 #!r6rs#!r5rs),您可以使用 SRFI-40。这里使用的是stream-car,而不是stream-first,所以Scheme和Racket语言在这一点上是不兼容的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 2022-01-03
    • 2013-07-14
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多