首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在类型化球拍中使用定义/合同(或类似的内容)?

如何在类型化球拍中使用定义/合同(或类似的内容)?
EN

Stack Overflow用户
提问于 2017-10-29 14:59:30
回答 1查看 329关注 0票数 3

我正在编写一个只接受正数的函数,我希望确保它在模块内部和其他地方都被正确使用。

我想写

代码语言:javascript
复制
#lang typed/racket
(require racket/contract)

(: excited-logarithm (-> Number Number))
(define/contract (excited-logarithm ([x : Number]) : Number)
  (-> (>=/c 0) number?)
  (displayln "Hold on to your decimals, we're going in!")
  (log x))

但是类型化的Racket不提供自己的define/contract,而vanilla define/contract也不理解类型化的Racket的注释(它引发语法错误)。

我能设法解决这个问题吗?我可以使用裸contractdefine/contract的方式将合同附加到excited-logarithm吗?

而且,我不该这么做有什么好的理由吗?是否不鼓励合同和类型的混合?

注意:我想我真正想要的是依赖式输入,但在Racket中是没有的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-30 00:01:19

这里的简单答案是:使用“非负-真实”类型,或者其他类似的TR类型来捕捉这个想法。

.Positive-.Real%29%29

(这里也有细化类型,但您不需要它们。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47001662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档