Cam*_*mel 7 lambda scheme sicp
在SICP 1.2.1中,有一个函数可以生成一个有理数,如下所示:
(define (make-rat n d)
(let ((g (gcd n d)))
(cons (/ n g) (/ d g))))
Run Code Online (Sandbox Code Playgroud)
我只是好奇你如何使用lambda而不是let来实现相同的东西,而不需要两次调用GCD.我自己无法理解.
Bil*_*ard 13
看看SICP第1.3.2节,
(let ((<var1> <exp1>)
(<var2> <exp2>)
...
(<varn> <expn>))
<body>)
Run Code Online (Sandbox Code Playgroud)
相当于
((lambda (<var1> ...<varn>)
<body>)
<exp1>
...
<expn>)
Run Code Online (Sandbox Code Playgroud)
所以你的程序,
(define (make-rat n d)
(let ((g (gcd n d)))
(cons (/ n g) (/ d g))))
Run Code Online (Sandbox Code Playgroud)
应该相当于
(define (make-rat n d)
((lambda (g)
(cons (/ n g) (/ d g)))
(gcd n d)))
Run Code Online (Sandbox Code Playgroud)
Ama*_*dan 10
这两件事情是一样的:
((lambda (p1 p2...) body) v1 v2...)
Run Code Online (Sandbox Code Playgroud)
和
(let ((p1 v1) (p2 v2)...) body)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5129 次 |
最近记录: |