在SICP 1.2.1中有一个生成有理数的函数,如下:
(define (make-rat n d)
(let ((g (gcd n d)))
(cons (/ n g) (/ d g))))
我只是好奇如何使用 lambda 而不是 let 来实现同样的事情,而不需要调用 GCD 两次。我自己也想不通。
看着SICP 第 1.3.2 节 http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-12.html#%_sec_1.3.2,
(let ((<var1> <exp1>)
(<var2> <exp2>)
...
(<varn> <expn>))
<body>)
相当于
((lambda (<var1> ...<varn>)
<body>)
<exp1>
...
<expn>)
所以你的程序,
(define (make-rat n d)
(let ((g (gcd n d)))
(cons (/ n g) (/ d g))))
应该等于
(define (make-rat n d)
((lambda (g)
(cons (/ n g) (/ d g)))
(gcd n d)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)