0

我正在尝试为分配实现流,但我错过了一些重要的东西。

这个stream-cons应该创建一个对,它是cdr的一个值和一个promise(稍后会评估)..

(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)
4

1 回答 1

2

您的线路:

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

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

(define str1 (stream-cons 1 2))
于 2013-03-17T18:30:17.097 回答