方案让形式
Scheme let-form
我有以下作业。
In this implementation, you must use let-form to define local name and
local procedures for PI, areac, and volumec. The procedures
TotalVolume and main remain to be global.
我这里有问题 3 中创建的程序:
(define PI 3.14159265)
(define (areac d)
(* (* PI (/ d 2)) (/ d 2)))
(define (volumec d h)
(let ((a (areac d)))
(/ (* a h) 3)))
(define (TotalVolume)
(let ((v1 (volumec 1 1))
(v2 (volumec 2 2))
(v3 (volumec 3 3))
(v4 (volumec 4 4))
(v5 (volumec 5 5)))
(display (+ v1 v2 v3 v4 v5))))
(define main
(TotalVolume))
但是现在我完全不知道如何使用 let-form 来更改代码。我了解 let-form 的工作原理,并且我了解对于 PI 我可以使用:
(let
(
(PI 3.14159265)
)
(body)
)
谁能指导我解决这个问题的正确方向?
这里的重点是有些定义依赖于之前的定义(例如:volumec
需要areac
和PI
),所以我们需要嵌套绑定和使用 lambda
s 定义函数。方法如下:
(define (TotalVolume)
(let ((PI 3.14159265))
(let ((areac (lambda (d) (* (* PI (/ d 2)) (/ d 2)))))
(let ((volumec (lambda (d h) (/ (* (areac d) h) 3))))
(let ((v1 (volumec 1 1))
(v2 (volumec 2 2))
(v3 (volumec 3 3))
(v4 (volumec 4 4))
(v5 (volumec 5 5)))
(display (+ v1 v2 v3 v4 v5)))))))
一种更简单的方法是使用 let*
,它允许我们定义依赖于先前定义的变量的绑定:
(define (TotalVolume)
(let* ((PI 3.14159265)
(areac (lambda (d) (* (* PI (/ d 2)) (/ d 2))))
(volumec (lambda (d h) (/ (* (areac d) h) 3)))
(v1 (volumec 1 1))
(v2 (volumec 2 2))
(v3 (volumec 3 3))
(v4 (volumec 4 4))
(v5 (volumec 5 5)))
(display (+ v1 v2 v3 v4 v5))))
我有以下作业。
In this implementation, you must use let-form to define local name and local procedures for PI, areac, and volumec. The procedures TotalVolume and main remain to be global.
我这里有问题 3 中创建的程序:
(define PI 3.14159265)
(define (areac d)
(* (* PI (/ d 2)) (/ d 2)))
(define (volumec d h)
(let ((a (areac d)))
(/ (* a h) 3)))
(define (TotalVolume)
(let ((v1 (volumec 1 1))
(v2 (volumec 2 2))
(v3 (volumec 3 3))
(v4 (volumec 4 4))
(v5 (volumec 5 5)))
(display (+ v1 v2 v3 v4 v5))))
(define main
(TotalVolume))
但是现在我完全不知道如何使用 let-form 来更改代码。我了解 let-form 的工作原理,并且我了解对于 PI 我可以使用:
(let
(
(PI 3.14159265)
)
(body)
)
谁能指导我解决这个问题的正确方向?
这里的重点是有些定义依赖于之前的定义(例如:volumec
需要areac
和PI
),所以我们需要嵌套绑定和使用 lambda
s 定义函数。方法如下:
(define (TotalVolume)
(let ((PI 3.14159265))
(let ((areac (lambda (d) (* (* PI (/ d 2)) (/ d 2)))))
(let ((volumec (lambda (d h) (/ (* (areac d) h) 3))))
(let ((v1 (volumec 1 1))
(v2 (volumec 2 2))
(v3 (volumec 3 3))
(v4 (volumec 4 4))
(v5 (volumec 5 5)))
(display (+ v1 v2 v3 v4 v5)))))))
一种更简单的方法是使用 let*
,它允许我们定义依赖于先前定义的变量的绑定:
(define (TotalVolume)
(let* ((PI 3.14159265)
(areac (lambda (d) (* (* PI (/ d 2)) (/ d 2))))
(volumec (lambda (d h) (/ (* (areac d) h) 3)))
(v1 (volumec 1 1))
(v2 (volumec 2 2))
(v3 (volumec 3 3))
(v4 (volumec 4 4))
(v5 (volumec 5 5)))
(display (+ v1 v2 v3 v4 v5))))