We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 0786570 commit d915302Copy full SHA for d915302
chapter3/exercise3-8.rkt
@@ -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
27
+ (let* ((right (f 3))
28
+ (left (f 2)))
29
+ (check-equal? (+ right left) 3)))))
0 commit comments