#lang racket
; function for calculating circle area.
(define (find-disk-area r ) (* 3.14 (* r r)))
; function for finding the ring size.
(define (find-ring-area r1 r2)
(
;let((a1 (find-disk-area r1))) <- syntax error cond: bad syntax in: cond
;(set! (find-disk-area r1) a1) <- syntax error cond: bad syntax in: cond
; how do I create two local variable inside of this
; function so I don't need to call find-disk-area 4 times?
cond
[(> r1 r2) (- (find-disk-area r1) (find-disk-area r2))]
[else (- (find-disk-area r2) (find-disk-area r1))]
)
)
(find-ring-area 100 90)
从上面可以看到,我必须调用find-disk-area帮助函数4次。我想调用辅助函数两次,存储2个圆的面积,然后使用存储的值来计算cond
圆环,以确保我们从较大的圆中减去较小的圆。我是该语言的新手,并且前缀语法样式使我无法接受。
如果我用python编写,则find ring函数的主体将类似于:
a1 = find-disk-area(r1)
a2 = find-disk-area(r2)
if( a1 > a2 ):
print(a1 - a2)
else:
print(a2 - a1)
您可以使用let在过程中本地绑定变量。如下所示:
(define (find-disk-area r)
(* pi (sqr r)))
(define (find-ring-area r1 r2)
(let ([a1 (find-disk-area r1)]
[a2 (find-disk-area r2)])
(cond
[(> a1 a2) (- a1 a2)]
[else (- a2 a1)])))
您还可以使用define达到相同的效果,将标识符绑定到某些表达式的结果:
(define (find-ring-area r1 r2)
(define (find-disk-area r)
(* pi (sqr r)))
(define a1 (find-disk-area r1))
(define a2 (find-disk-area r2))
(if (> a1 a2)
(- a1 a2)
(- a2 a1)))
此外,就可以避免定义a1
和a2
做完全:
(define (find-ring-area r1 r2)
(define (ring-area r1 r2)
(* pi (- (sqr r1) (sqr r2))))
(if (> r1 r2)
(ring-area r1 r2)
(ring-area r2 r1)))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句