1
首先我會提出問題。方案:交互式I/O的延遲和強制
假設定義輸入要返回一個「istream的」功能 - 一個承諾,當用力將產生對,CDR這是一個IStream:
(define input (lambda() (delay (cons (read) (input)))))
現在我們可以定義司機期待一個「ostream的」 - 空列表或一對,CDR的這是一個ostream:
(define driver
(lambda (s)
(if (null? s) '()
(begin
(display (car s))
(driver (force (cdr s)))))))
注意,使用武力。
顯示如何編寫函數方塊,以便將istream作爲參數並返回一個ostream。你應該能夠輸入(驅動程序(方塊(輸入)))並查看適當的行爲。
書中的正方形在上面。
(define squares (lambda (a)
(cons "please enter a number\n"
(let ((n (car a)))
(if (eof-object? n) '()
(cons (* n n) (cons #\newline (squares (cdr a)))))))))
(define output (squares (input)))
我不知道如何解決這個問題,我可以從哪裏開始。請幫忙。