首页 > 解决方案 > 如何为具有任意数量值的异构列表制定合同?

问题描述

我正在尝试为如下所示的数据签订合同:

'(a (b c) (d e) ...) ; a, b, c, d, e are all symbols

这基本上是一个由一个符号组成的列表,后跟任意数量的两个符号列表。

有,list/c但这只能让我用固定数量的元素来制作它。还有*list/c一个采用任意初始值,然后是最终固定值,这与我需要的相反。

如何为我的数据结构制定正确的合同?

标签: racketcontract

解决方案


您可以使用cons/c将一个合同应用于列表的头部,将另一个合同应用于列表的尾部。你想要表达的是头部是一个符号,尾部是符号对的列表,所以它是:

(cons/c symbol? (listof (list/c symbol? symbol?)))

推荐阅读