【问题标题】:Local define usage in typed racket键入球拍中的本地定义用法
【发布时间】:2013-02-10 02:22:22
【问题描述】:

我很难弄清楚如何在 Typed Racket 中使用本地表单。

这有什么问题:

(: 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)))

我确定问题在于我没有完全遵循 ts-reference 中的句法规范,但是在类型化的球拍中有一两个本地定义的函数的示例会非常有帮助。

【问题讨论】:

    标签: scheme racket typed-racket


    【解决方案1】:

    答案是,使用 letrec:。嗯,现在我知道了。

    (: 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 '())))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-29
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 2021-04-01
      • 2019-10-27
      • 1970-01-01
      相关资源
      最近更新 更多