![](/img/trans.png)
[英]How to use 'let' and 'map' to simplify a recursive function in racket?
[英]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.