我正在尝试为作业实现流程,而且我遗漏了一些重要内容。
这个流缺点应该是创建一对,这是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)
答案 0 :(得分:3)
你的专栏:
(define (str1) (stream-cons 1 2))
定义了一个名为str1的函数,因此str1不是一对。它应该是:
(define str1 (stream-cons 1 2))