简体   繁体   English

键入球拍中的本地定义用法

[英]Local define usage in typed racket

I'm having a hard time figuring out how to use the local form in Typed Racket. 我很难弄清楚如何在Typed Racket中使用本地表单。

what is wrong with this: 这有什么问题:

(: make-random-emetype-list (Range -> (Listof EmeType)))
(define (make-random-emetype-list range )
 (local ([define how-many-types (random-integer (Range-lower range) (Range-upper range))]
         [define: (bld-lst  lst remaining)  : ((Listof EmeType) Integer -> (Listof EmeType))
           (cond [(< remaining 1) lst]
                 [else (bld-lst (cons (new-emetype) lst) (- remaining 1))])])          
(bld-lst '() how-many-types)))

I'm sure the problem is that I don't quite follow the syntactic specification in the ts-reference, but it would be very helpful to have an example or two of a locally defined function in typed racket. 我确定问题是我没有完全遵循ts-reference中的语法规范,但是在类型化球拍中包含一个或两个本地定义函数的示例将非常有帮助。

The answer is, use letrec:. 答案是,使用letrec:。 Well, now I know. 好吧,现在我知道了。

(: make-random-emetype-list (Range -> (Listof EmeType)))
(define (make-random-emetype-list range )
  (letrec: ([lower : Integer (Range-lower range)]
        [upper : Integer (Range-upper range)]
        [how-many : Integer (random-integer lower upper)]
        [bld-lst : (Integer (Listof EmeType) -> (Listof EmeType)) (lambda: ([remaining : Integer] [lst : (Listof EmeType)]) 
                                                                    (cond [(< remaining 1 ) lst]
                                                                          [else (bld-lst (- remaining 1) (cons (new-emetype) lst))]))])
    (bld-lst how-many '())))

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

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