gpt4 book ai didi

racket - Racket 中结构的依赖契约

转载 作者:行者123 更新时间:2023-12-04 09:54:27 34 4
gpt4 key购买 nike

假设我为具有“中心”的集合定义了一个结构体。

(struct centered-set (center elems))

我想保证以下条件。
  • elems是一个集合。
  • centerelems 的成员(member).

  • 我可以用 #:guard表达条件.有没有办法表达与契约(Contract)相同的条件?

    对于函数, ->i作为这种依赖合约的组合器。如何表达结构的依赖契约?

    最佳答案

    IIUC, contract-out不支持这样的东西。但是,您可以通过附加契约(Contract)手动提供构造函数和访问器来模拟功能:

    #lang racket

    (module foo racket
    (provide (contract-out [bt (-> any/c any/c any/c (bst/c 1 10))]
    [bt-val (-> (bst/c 1 10) any/c)]
    [bt-left (-> (bst/c 1 10) any/c)]
    [bt-right (-> (bst/c 1 10) any/c)]))

    (define (bst/c lo hi)
    (or/c #f
    (struct/dc bt
    [val (between/c lo hi)]
    [left (val) #:lazy (bst/c lo val)]
    [right (val) #:lazy (bst/c val hi)])))

    (struct bt (val left right)))

    (require 'foo)

    (bt 11 #f #f)

    应该可以写一个 provide transformer使这个过程自动化。

    关于racket - Racket 中结构的依赖契约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61950587/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com