0

割り当て用のストリームを実装しようとしていますが、重要なものがありません。

この stream-cons は、値と 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)
4

1 に答える 1

2

あなたの行:

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

str1 という関数を定義しているため、str1 はペアではありません。それは読むべきです:

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