我正在尝试为分配实现流,但我错过了一些重要的东西。
这个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)