2013-03-17 158 views
0

我正在尝试为任务实现流,并且我失去了一些重要的东西。我在这个方案流实现中做了什么错误?

该流利弊应该创建一对这是一个值和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) 

回答

3

你的线:

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

是定义一个函数调用str1和因此STR1不是一双。它应该是:

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

谢谢!我怎么没有看到这一点。 – 2013-03-17 19:06:13

相关问题