【发布时间】:2019-06-25 11:21:40
【问题描述】:
我正在用 Racket 编写小型宠物项目,并使用 Gregor lib 来处理日期。
我有接受两个日期的函数(来自 Gregor,而不是标准库),我想为它添加合同。合同应该说第一个参数的日期必须小于/早于第二个参数的日期。
在 Gregor 我们可以使用(date<=? x y) 或类似的谓词来实现它,但我不明白如何将它与合约结合起来。
(contract-out
[process-dates (->i ([x date?]
[y (x) (and/c date?
(date>=? x))])])
将不起作用,并且没有开箱即用的 date>=?/c 谓词。
所以我想我需要自己编写这样的谓词,因此我想知道该怎么做。我查看了 Racket 的源代码,发现标准功能是 quite complicated 可以重现。
有没有更简单的方法来实现我想要的?
【问题讨论】:
标签: date scheme racket predicate contract