Racket 还原关系';孔中的s可能以许多不同的方式匹配孔

Racket 还原关系';孔中的s可能以许多不同的方式匹配孔,racket,plt-redex,redex,Racket,Plt Redex,Redex,我有一种用PLT Redex定义的语言,它有(动态)混合类型。表达式如下所示: ;用语 (e):=x (lkp e f) (叫e…) (新C.e.)。。。⊕ (e-R-e…) (将x…与y…e中的(e R e…)绑定) ; 价值观 (v::=(新的C v。。。⊕ (v R v…) 语言的评价是通过评价语境和还原关系来完成的 ;评价语境 (E::=孔 (lkp E f);CR-FIELD (呼叫E-m-E…);CR-INVK (呼叫v m v…E…);CR-INVK-ARG 新。。。⊕ (e

我有一种用PLT Redex定义的语言,它有(动态)混合类型。表达式如下所示:

;用语
(e):=x
(lkp e f)
(叫e…)
(新C.e.)。。。⊕ (e-R-e…)
(将x…与y…e中的(e R e…)绑定)
; 价值观
(v::=(新的C v。。。⊕ (v R v…)
语言的评价是通过评价语境和还原关系来完成的

;评价语境
(E::=孔
(lkp E f);CR-FIELD
(呼叫E-m-E…);CR-INVK
(呼叫v m v…E…);CR-INVK-ARG
新。。。⊕ (e-R-e…)
新。。。⊕ (E-R-E…)
新。。。⊕ (v R v…E E…)
(将x…与y…E中的(E R E…)绑定)
(将x…与(v R v…E E…从y…E)绑定)
其中,我的缩减关系当前仅定义为字段访问(
lkp
),它将mixin上的查找缩减为其值

(定义红色
(1)还原关系
费伊
#:域名(电子商务)
;R-场
(->)((在孔E(lkp)中(新的C v_0。。。⊕ (v_1 R v_2…)f_i)CT)
((孔内E v_i)CT)
“(R-FIELD)”
(其中v_i(f值CT f_i)(新的C v_0。。。⊕ (v_1 R v_2…)
))
我对我的元函数(
fvalue
)进行了测试,以验证它们是否有效。然而,redex告诉我,我的约化关系以许多不同的方式映射到一个洞。我是否为
newc…
注释不同版本的求值上下文并不重要。错误来自于


如何调试(或修复)该问题?通常,我使用Emacs和Racket模式开发或使用DrRacket。问题是当使用宏步进器时,错误会从一个步骤抛出到另一个步骤。如果我能看到它捕获的漏洞,甚至能理解它失败的地方,那就太好了。因此,我可能完全理解它失败的原因。

如果我使用以下上下文定义来定义语言,我会得到相同的错误(为了简单起见,我将使用类似于
λ的语言):

但是(IIUC)Redex(或者至少
简化关系
)不允许存在多个漏洞的上下文,因此它抱怨道


代码中的问题似乎出现在
E
的最后两个产品中,其中
E
出现在后跟省略号的模式中。(一个被注释掉的
E
产品也有同样的问题。)

噢,省略号。这似乎很合乎逻辑。我有一本PLT Redex的书,书中提到了多个孔。这个警告没有被讨论。我会回来报到的!这就解决了!我非常感激。
reduction-relation: in-hole's first argument is expected to match exactly one hole, but it may match a hole many different way
(E hole
   (E e ...)
   (v E ...))  ;; <-- problem
((lambda (x y) x) hole hole)