在计划中使用本地

时间:2013-11-03 19:52:29

标签: list scheme local racket

(define-struct point (x y))


(define (helper lon)
  (* (point-x lon)
     (point-y lon)))

(define (cart lon)

  (cond
    [(empty? lon) 0]
    [else
     (+ (helper (first lon))
        (cart (rest lon))1)]))

我正在玩游戏,制作一系列功能,以查看我是否可以使用本地功能。这只是将x和y相乘,并将结果加1。有没有办法可以替换我在这里创建的辅助函数并使用local?

1 个答案:

答案 0 :(得分:1)

当然,这似乎是使用local的好地方,只要helper程序仅在cart内使用:

(define (cart lon)
  (local [(define (helper lon)
            (* (point-x lon)
               (point-y lon)))]
    (cond
      [(empty? lon) 0]
      [else
       (+ (helper (first lon))
          (cart (rest lon))
          1)])))

另请注意,根据使用的语言,local可能不是必需的,一个简单的内部定义也可以解决问题:

(define (cart lon)
  (define (helper lon)
    (* (point-x lon)
       (point-y lon)))
  (cond
    [(empty? lon) 0]
    [else
     (+ (helper (first lon))
        (cart (rest lon))
        1)]))