球拍在 let 中创建 function/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
我想不出最好的方法是什么。我知道将 wrap-edge 定义为兄弟姐妹很容易,但如果我想要 "let in" 之类的东西,define 不是正确的选择......虽然我可能只是让自己变得更难.应该更像:
(let ([wrap-edge (lambda (coords) (append coords tetramino-wh))]))
这是唯一的选择吗?这样做看起来很臃肿。
对于这样的事情,在 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)))]))
另请参阅 Racket Style Guide 中关于 let
与 define
的建议。
我对用 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
我想不出最好的方法是什么。我知道将 wrap-edge 定义为兄弟姐妹很容易,但如果我想要 "let in" 之类的东西,define 不是正确的选择......虽然我可能只是让自己变得更难.应该更像:
(let ([wrap-edge (lambda (coords) (append coords tetramino-wh))]))
这是唯一的选择吗?这样做看起来很臃肿。
对于这样的事情,在 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)))]))
另请参阅 Racket Style Guide 中关于 let
与 define
的建议。