Add lazy lists from the book
This commit is contained in:
parent
c5418454ed
commit
f5ca407f3e
|
@ -0,0 +1,41 @@
|
|||
;; Lisp code that can be evaluated by the lazy evaluator to implement
|
||||
;; lazy lists
|
||||
|
||||
#lang sicp
|
||||
|
||||
(#%provide lazy-lists-program)
|
||||
|
||||
(define lazy-lists-program
|
||||
'((define (cons x y)
|
||||
(lambda (m) (m x y)))
|
||||
|
||||
(define (car z)
|
||||
(z (lambda (p q) p)))
|
||||
|
||||
(define (cdr z)
|
||||
(z (lambda (p q) q)))
|
||||
|
||||
(define (list-ref items n)
|
||||
(if (= n 0) (car items)
|
||||
(list-ref (cdr items)
|
||||
(- n 1))))
|
||||
|
||||
(define (map proc items)
|
||||
(if (null? items) '()
|
||||
(cons (proc (car items))
|
||||
(map proc (cdr items)))))
|
||||
|
||||
(define (scale-list items factor)
|
||||
(map (lambda (x) (* x factor)) items))
|
||||
|
||||
(define (add-lists list1 list2)
|
||||
(cond ((null? list1) (car list2))
|
||||
((null? list2) (car list1))
|
||||
(else
|
||||
(cons (+ (car list1) (car list2))
|
||||
(add-lists (cdr list1)
|
||||
(cdr list2))))))
|
||||
|
||||
(define ones (cons 1 ones))
|
||||
|
||||
(define integers (cons 1 (add-lists ones integers)))))
|
|
@ -10,6 +10,7 @@
|
|||
(#%require "environment.rkt")
|
||||
(#%require "common.rkt")
|
||||
(#%require "special-forms.rkt")
|
||||
(#%require "lazy-list.rkt")
|
||||
|
||||
(#%provide lazy-driver-loop
|
||||
lazy-eval-program)
|
||||
|
@ -83,6 +84,8 @@
|
|||
|
||||
(define (lazy-driver-loop)
|
||||
(define env (setup-environment))
|
||||
;; Read in code to implement lazy lists
|
||||
(eval-program lazy-lists-program actual-value user-print env)
|
||||
(define (driver-loop)
|
||||
(prompt-for-input input-prompt)
|
||||
(let ((input (read)))
|
||||
|
@ -94,6 +97,7 @@
|
|||
|
||||
(define (lazy-eval-program program)
|
||||
(define env (setup-environment))
|
||||
(eval-program lazy-lists-program actual-value user-print env)
|
||||
(eval-program program actual-value user-print env))
|
||||
|
||||
;;; Representing thunks
|
||||
|
|
Loading…
Reference in New Issue