我在这个方案流实现中做错了什么?

时间:2013-03-17 18:25:52

标签: scheme

我正在尝试为作业实现流程,而且我遗漏了一些重要内容。

这个流缺点应该是创建一对,这是cdr的值和承诺(稍后要评估)..

(define (str1) (stream-cons 1 2))

但是,当我调用(stream-car str1)时,它会抱怨“预计合同违规:配对?”

我不明白为什么str1不是一个有效的对 - 我该怎么做才能使这个工作?

罗布

#lang racket

(define-syntax delay
  (syntax-rules () ((delay expr) (lambda () expr))))

(define (force delayed-obj)
  (delayed-obj))

(define-syntax stream-cons
  (syntax-rules() ((stream-cons x y)
                   (cons x (delay y)))))

(define (stream-car stream)
  (car stream))

(define (stream-cdr stream)
  (force (cdr stream)))

(define the-empty-stream '())

;;; 

; TESTS
(define (str1) (stream-cons 1 2))

(stream-car str1)

1 个答案:

答案 0 :(得分:3)

你的专栏:

(define (str1) (stream-cons 1 2))

定义了一个名为str1的函数,因此str1不是一对。它应该是:

(define str1 (stream-cons 1 2))