我在使用Rosette实现程序合成器时最常见的错误之一是以不安全的方式使用未提升的Racket 构造(unsat)
,这会使合成器输出。
事实上,作为初学者的 Rosette 程序员,很难仅仅找出可能导致问题的未提升的 Racket 结构。我认为 DrRacket 可能会有所帮助,例如,通过不显示从#lang rosette
线到未提升的球拍结构的箭头,例如assv
,但事实并非如此,即它向两个未提升的球拍结构(assv
例如和提升的运营商(例如,first
)。
我一直在使用两种策略,(i)rosette/safe
尽可能构建合成代码,然后切换到完整的语言,这很不方便,因为我不能使用更新和更高级的 Racker 构造,以及 (ii) 略读我的构造在我的代码中使用并检查它们是否由 提供rosette/base/base.rkt
,这很烦人。
经验丰富的 Rosette 程序员有什么建议吗?