球拍基本问题

时间:2011-09-09 15:42:29

标签: racket

我开始使用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)

1 个答案:

答案 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)))))