无法 运行 Dr. Racket 中的 Rosette 语言
unable to run Rosette Language in Dr. Racket
我按照 Rosette 网站上的说明下载了 Rosette (https://docs.racket-lang.org/rosette-guide/ch_getting-started.html)。看来我可以 运行 这个程序并且没有输出错误。
#lang rosette/safe
; Compute the absolute value of `x`.
(define (absv x)
(if (< x 0) (- x) x))
; Define a symbolic variable called y of type integer.
(define-symbolic y integer?)
; Solve a constraint saying |y| = 5.
(solve
(assert (= (absv y) 5)))
但是,当我尝试 运行使用基本球拍关键字以外的其他程序时,我会遇到不清楚的错误。
#lang rosette
(struct plus (left right) #:transparent)
(struct mul (left right) #:transparent)
(struct square (arg) #:transparent)
(define prog (plus (square 7) 3))
(define (interpret p)
(destruct p
[(plus a b) (+ (interpret a) (interpret b))]
[(mul a b) (* (interpret a) (interpret b))]
[(square a) (expt (interpret a) 2)]
[_ p]))
(interpret prog)
这给了我一个错误 destruct: unbound identifier in: destruct
。到底是怎么回事?这段代码不是我自己的,而是从教程中复制粘贴的,所以我认为它应该可以工作。我还尝试了从 Rosette 网站粘贴的示例代码副本,但给出了类似的错误。我已按照所有安装说明进行操作并更新了环境路径等。有帮助吗?
默认情况下,destruct
未由 #lang rosette
提供。您需要通过以下方式要求它:
(require rosette/lib/destruct)
在#lang rosette
之后
顺便问一下,您是在哪里找到这段代码的?
我按照 Rosette 网站上的说明下载了 Rosette (https://docs.racket-lang.org/rosette-guide/ch_getting-started.html)。看来我可以 运行 这个程序并且没有输出错误。
#lang rosette/safe
; Compute the absolute value of `x`.
(define (absv x)
(if (< x 0) (- x) x))
; Define a symbolic variable called y of type integer.
(define-symbolic y integer?)
; Solve a constraint saying |y| = 5.
(solve
(assert (= (absv y) 5)))
但是,当我尝试 运行使用基本球拍关键字以外的其他程序时,我会遇到不清楚的错误。
#lang rosette
(struct plus (left right) #:transparent)
(struct mul (left right) #:transparent)
(struct square (arg) #:transparent)
(define prog (plus (square 7) 3))
(define (interpret p)
(destruct p
[(plus a b) (+ (interpret a) (interpret b))]
[(mul a b) (* (interpret a) (interpret b))]
[(square a) (expt (interpret a) 2)]
[_ p]))
(interpret prog)
这给了我一个错误 destruct: unbound identifier in: destruct
。到底是怎么回事?这段代码不是我自己的,而是从教程中复制粘贴的,所以我认为它应该可以工作。我还尝试了从 Rosette 网站粘贴的示例代码副本,但给出了类似的错误。我已按照所有安装说明进行操作并更新了环境路径等。有帮助吗?
destruct
未由 #lang rosette
提供。您需要通过以下方式要求它:
(require rosette/lib/destruct)
在#lang rosette
顺便问一下,您是在哪里找到这段代码的?