racket - 如何为具有任意数量值的异构列表制定合同?
问题描述
我正在尝试为如下所示的数据签订合同:
'(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?)))
推荐阅读
- java - 启动默认 SMS 应用程序将我发送到系统跟踪菜单
- flutter - 无法初始化解码器:颤振中的 OMX.sprd.h264.decoder
- python - 从python中的字符串中删除前导空字符
- activemq - Apache ActiveMQ - 传输连接到:tcp:/ 失败:java.io.EOFException /java.net.SocketException:软件导致连接中止:recv 失败
- java - 如何检索包含已执行 jar 文件的目录?
- python - 如何在 matplotlib 图中定位文本而不提及任何坐标?
- sharepoint - PowerApps 流:操作失败的条件
- r - R - 如何使用这些密钥导入打开的数据集(zip 文件)
- android-ndk - 从android java调用C外部库(.so)
- facebook-graph-api - Facebook 提交登录审核,但仍处于开发模式