繁体   English   中英

球拍在let中创建功能/ lambda

[英]racket create function/lambda in let

我对用Racket编写的函数感到非常困惑。 我可能已经习惯了OCaml的let ... in语法。

(define/public (get-rects)
    (let wrap-edge ([(coords '()) (append coords tetramino-wh)])
        (case current-type
            [(0) (vector
                (wrap-edge (list 0 0))
                (wrap-edge (list tetramino-w 0))
                (wrap-edge (list (* 2 tetramino-w) 0))
                (wrap-edge (list (* 3 tetramino-w) 0)))])))

我正在尝试像OCaml这样做:

let wrap_edge = ... in
   // Create a vector using wrap-edge

我不能全神贯注地做到这一点的最好方法是什么。 我知道将包装边定义为同级是容易的,但是如果我想“放进”这种东西,那么定义就不是正确的选择……尽管我可能只是在自己身上加重难度。 应该更像是:

(let ([wrap-edge (lambda (coords) (append coords tetramino-wh))]))

这是唯一的选择吗? 这样看来太seems肿了。

对于这样的事情,在Racket中仅使用define可能更常见。 您可以在现有函数中声明一个函数,然后照常使用它。

(define/public (get-rects)
  (define (wrap-edge coords)
    (append coords tetramino-wh))
  (case current-type
    [(0) (vector
          (wrap-edge (list 0 0))
          (wrap-edge (list tetramino-w 0))
          (wrap-edge (list (* 2 tetramino-w) 0))
          (wrap-edge (list (* 3 tetramino-w) 0)))]))

另请参阅《 球拍风格指南》中关于let vs define的建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM