Skip to content

Commit d915302

Browse files
committed
Add exercise3-8
1 parent 0786570 commit d915302

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

chapter3/exercise3-8.rkt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#lang racket
2+
3+
;;; 相当于总是返回第一个函数的参数,并且第二个函数的调用结果为0
4+
;;; (+ (f 0) (f 1)
5+
;;; 因为从左到右运算,第一个函数是 (f 0), 参数是 0, 第二个函数的结果总
6+
;;; 是为0, 即 (+ 0 0)
7+
;;; 从右到左运算,第一个函数是 (f 1), 参数是 1, 第二个函数的结果为0,
8+
;;; 即 (+ 0 1)
9+
(define (make-f)
10+
(let ((called #f))
11+
(lambda (param)
12+
(if called
13+
0
14+
(begin (set! called #t)
15+
param)))))
16+
17+
(module+ test
18+
(require rackunit)
19+
20+
(test-case "Left-to-right evaluation"
21+
(let ((f (make-f)))
22+
(check-equal? (+ (f 2) (f 3)) 2)))
23+
24+
(test-case "Right-to-left evaluation"
25+
; 手动模拟从右到左
26+
(let ((f (make-f)))
27+
(let* ((right (f 3))
28+
(left (f 2)))
29+
(check-equal? (+ right left) 3)))))

0 commit comments

Comments
 (0)