如何为具有任意数量值的异构列表制定合同?

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?)))