如何为具有任意数量值的异构列表制定合同?
How to make a contract for a heterogeneous list with arbitrary number of values?
我正在尝试为如下所示的数据制定合同:
'(a (b c) (d e) ...) ; a, b, c, d, e are all symbols
这基本上是一个由一个符号组成的列表,后跟任意数量的两个符号列表。
有 list/c
但这只能让我用固定数量的元素来制作它。
还有 *list/c
取任意初始值,然后是最终固定值,这与我需要的相反。
如何为我的数据结构制定正确的契约?
您可以使用 cons/c
将一个合约应用到列表的头部,将另一个合约应用到列表的尾部。你想表达的是,头部是一个符号,尾部是符号对的列表,所以那就是:
(cons/c symbol? (listof (list/c symbol? symbol?)))
我正在尝试为如下所示的数据制定合同:
'(a (b c) (d e) ...) ; a, b, c, d, e are all symbols
这基本上是一个由一个符号组成的列表,后跟任意数量的两个符号列表。
有 list/c
但这只能让我用固定数量的元素来制作它。
还有 *list/c
取任意初始值,然后是最终固定值,这与我需要的相反。
如何为我的数据结构制定正确的契约?
您可以使用 cons/c
将一个合约应用到列表的头部,将另一个合约应用到列表的尾部。你想表达的是,头部是一个符号,尾部是符号对的列表,所以那就是:
(cons/c symbol? (listof (list/c symbol? symbol?)))