racket - 判决中的离奇合同违反
问题描述
我有judgement
以下合同:
(define-judgment-form DynamicLam
#:mode (down I I O O)
#:contract (down Γ e Γ e)
[----------------"Lambda"
(down Γ_0 z_0 Γ_0 z_0)]
;; rest of the code ...
)
当我运行这个:
(define empty (term ()))
(redex-match? DynamicLam Γ empty)
(redex-match? DynamicLam e lam1^*)
(redex-match? DynamicLam z lam1^*)
(judgment-holds (down empty lam1^* empty lam1^*))
我回来了:
#t
#t
#t
. . down:判断输入值与其合约不匹配;(由_表示的未知输出值)合约:(down Γ e Γ e)值:(down empty lam1^* _ _)
但这没有意义,因为我redex-match?
上面明明用过来测试:
- 那
empty
匹配Γ
- 那
lam1^*
匹配e
- 而且那
lam1^*
匹配z
。
我错过了什么?#:contract
除了匹配之外,还有更多的含义Γ e Γ e
吗?
解决方案
我通过改变#:mode
to(down I I I I)
而不是(down I I O O)
和改变解决了这个问题
(judgment-holds (down empty lam1^* empty lam1^*))
至
(judgment-holds (down ,empty ,lam1^* ,empty ,lam1^*))
这种,
变化对我来说很有意义,但我仍然不明白为什么需要将两个输出作为输入,所以如果有人可以编辑这个答案来解释这一点,或者提供评论或另一个解释这个微妙之处的答案,那将是极好的。
推荐阅读
- android - 我的 EditText 上的 findViewById 返回 null 错误
- leaflet - Leaflet Map初始化相同的地图/不同的中心
- c# - 在选择器中的 Xamarin SelectedItem 中即使选择了一个值也是空的
- python - 我对 Codility 中的 CountNonDivisible 问题的逻辑有什么问题?
- python - 使用熊猫循环遍历数据框时使用 if/else 语句的最快方法
- html - 无法使用可滚动单元格居中表格单元格内容
- c# - 油漆/形状/图形问题(提供 ZIP)
- javascript - Alan AI 没有安装在 React Native 中
- python - Html 文件在 Django 中的 Python 中不起作用
- php - 如何使 PHP 分页从第 1 页而不是第 0 页开始?