在方案中使用 lambda 而不是 let

2023-12-23

在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(使用前将#替换为@)

在方案中使用 lambda 而不是 let 的相关文章

随机推荐