- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
每次我在 PLT redex 中定义一种语言时,我都需要手动定义一个(避免捕获)替换函数。例如,此模型尚未完成,因为 subst
未定义:
#lang racket/base
(require redex/reduction-semantics)
(define-language Λ
[V ::= x (λ x M)]
[M ::= (M M) V]
[C ::= hole (V C) (C M)]
[x ::= variable-not-otherwise-mentioned])
(define -->β
(reduction-relation Λ
[--> (in-hole C ((λ x M) V))
(in-hole C (subst M x V))]))
但是subst
的定义是显而易见的。 PLT redex 可以自动处理替换吗?
最佳答案
是的!只需用 #:binding-forms
描述您的语言的绑定(bind)结构即可。声明。
这是一个类似的模型,通过 substitute
进行避免捕获替换功能:
#lang racket/base
(require redex/reduction-semantics)
(define-language Λ
[V ::= x (λ x M)]
[M ::= (M M) V]
[C ::= hole (V C) (C M)]
[x ::= variable-not-otherwise-mentioned]
#:binding-forms
(λ x M #:refers-to x)) ;; "term M refers to the variable x"
(define -->β
(reduction-relation Λ
[--> (in-hole C ((λ x M) V))
(in-hole C (substitute M x V))]))
(apply-reduction-relation -->β
(term ((λ x (λ y x)) y)))
;; '((λ y«2» y))
字母等价也是免费的,请参阅 alpha-equivalent?
(谢谢Paul Stansifer!)
关于racket - plt-redex:免费捕获避免替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41276568/
定义语义的常见方法是(例如): return v if [some other condition] otherwise, return error 例如,考虑 (define-language si
完全可以在不使用求值上下文的情况下为我的语言编写求值规则。我的语义完全是按值调用的,不允许在 lambda 内部向前推进该术语。尽管如此,我看到的所有资源都以某种方式使用了归约上下文。使用我缺少的上下
每次我在 PLT redex 中定义一种语言时,我都需要手动定义一个(避免捕获)替换函数。例如,此模型尚未完成,因为 subst 未定义: #lang racket/base (require red
我正致力于在类型系统的 Redex 中构建一个模型,该模型也具有规范的实现。我想使用 redex-check 来针对实际实现对我的模型进行模糊测试。 实现(带有适配器)可以采用我的抽象语法,所以我需要
我正在使用[regex]::matches($string, $pattern)在日志文件的两行之间搜索行。 我的文件(节选): -----end----- AAA BBB CCC -----star
我相信我对等递归和等递归类型都非常了解。因此,我一直在尝试使用 PLT Redex 中的等递归类型为 ISWIM 实现类型检查器。但是,对于我的一生,我无法弄清楚如何使类型等效起作用。其他一切都很好。
这是一个困扰我一段时间的问题,我想知道这里是否有人可以提供帮助。 我有一个名为 lambdaLVar 的语言的 PLT Redex 模型,它或多或少是一种花园式的无类型 lambda 演算,但扩展了一
我正在尝试为一种语言准备语义。某些推导可能会导致“卡住”状态。我想测试一下,哪个术语不能降低到“卡住”状态。是否可以使用 test-->E 之类的东西来表示它? 最佳答案 这是改编自 λv examp
当我试图证明一个关于递归函数的定理时(见下文),我最终得到了一个可约表达式 (fix picksome L H := match A with .... end) L1 H1 = RHS 我想扩展ma
我没有看到 facebook 给出任何关于为什么 redex 比使用 proguard 更好的统计数据。谁能列出优缺点?显然,redex 应该能让 Android 运行得更快。有一篇差文http://
P在Redis中用来表示毫秒。PSETEX 等命令用于设置以毫秒 (P) 为单位的到期时间。我找不到使用 P 的任何原因 - 谁能解释一下用于毫秒的字母 P 的词根是什么? 最佳答案 P 代表prec
我是一名优秀的程序员,十分优秀!