使用#lang plai定义类型时语法错误

时间:2017-09-14 02:48:18

标签: syntax-error racket

我在这段代码上遇到错误的语法错误

deleted

更具体地说,这个错误:

xxx:22.0: define-type: bad syntax in: xxx
  #(739 316)

我是该语言的新手,所以有人可以告诉我我的代码有什么问题以及如何摆脱错误?

1 个答案:

答案 0 :(得分:0)

以下是导致语法错误的问题行:

i   --> [give (expr1 OE?) name (id-ref1 symbol?) in (expr2 OE?)]
ii  --> [(string-literal string?)]
iii --> [(id-ref2 symbol?)]

docs所述,define-type具有结构

(define-type type-id variant ...)

,其中

variant = (variant-id (field-id contract-expr) ...)

因此,每个变体必须具有 variant-id ,并且每个 field-id 必须具有关联的合同。违反此行为是语法错误的原因。

对于(i)名称和中的都缺少合同,因此可能的解决方法是在字段中添加合同(使用{ {1}}作为示例合同):

string?

[give (expr1 OE?) (name string?) (id-ref1 symbol?) (in string?) (expr2 OE?)] (ii)都缺少 variant-ids ,因此添加它们可以解决问题:

(iii)

这是一种可能的类型重写,包含建议的更改:

[some-variant-id (string-literal string?)]
[some-other-variant-id (id-ref2 symbol?)]