2013-03-17 157 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

相關問題