我开始使用Racket,并且(作为一名新手)我在查找我的代码出了什么问题时遇到了一些麻烦。起初,我尝试将该东西作为单个函数实现,并且它运行良好:
; Finds surface area of pipe
; outside surface area (2pir+thickness)*length
; inside SA 2pirad*length
; 2 (area of outer circle - area of inner circle)
; add all together
(define (area-pipe inner_radius height thickness)
(+ (* 2 pi inner_radius height)
(* 2 pi height (+ inner_radius thickness))
(- (* 2 pi (sqr (+ inner_radius thickness)))
(* 2 pi (sqr inner_radius)))))
并且(因为我正在按照here提供的教程),我开始将其作为一组函数来实现,我最终得到了以下内容:
; functional implementation
(define (area-circle radius)
(* 2 pi (sqr radius)))
(define (area-cylinder radius height)
(* 2 pi (sqr radius) height))
;actual function--why doesn't this quite work as planned?
(define (area-pipe1 inner_radius height thickness)
(+ (area-cylinder inner_radius height)
(area-cylinder (+ inner_radius thickness) height)
(- (area-circle (+ inner_radius thickness))
(area-circle inner_radius))))
所以,我猜测我的定义存在问题。但是,我很感激为什么我没有得到正确答案的一些提示和推动。 作为测试,该站点提供以下代码:
(test (area-pipe1 0.5 0 0.5) 4.71)
(test (area-pipe1 0 2 1) 18.85)
(test (area-pipe1 1 2 1) 56.54)
答案 0 :(得分:2)
您的area-cylinder
错了。它应该取周长并乘以高度。因此:
(define (area-cylinder radius height)
(* 2 pi radius height))
你的area-circle
也错了。应该这样:
(define (area-circle radius)
(* pi radius radius))
所以area-pipe
函数应该是:
(define (area-pipe2 inner-radius height thickness)
(+ (area-cylinder inner-radius height)
(area-cylinder (+ inner-radius thickness) height)
(* 2 (- (area-circle (+ inner-radius thickness))
(area-circle inner-radius)))))