这是我第一次使用racket,并且在尝试评估Dr. Racket中的列表时收到错误消息(*:未绑定标识符;)。
#lang racket
(define (randop)
(define x(random 3))
(cond
((= x 0) '+)
((= x 1) '-)
((= x 2) '*)
)
)
(define (randexp ht)
(define x(random 10))
(define y(random 10))
(define z(randop))
(eval (list z y x))
)
(randexp 1)
在控制台中执行racket时,(eval lst)运行正常,但是当我执行此代码时,它会出现一个未绑定的标识符。任何帮助表示赞赏。
答案 0 :(得分:3)
你在这里不需要评估。而不是返回符号而是返回程序:
#lang racket
(define (randop)
(define x (random 3))
(cond ((= x 0) +) ; + not quoted means if will return what + evaluates to
((= x 1) -) ; which is the procedures they represent
((= x 2) *)))
(define (randexp)
(define x (random 10))
(define y (random 10))
(define z (randop))
(z y x))) ; call z (the procedure returned by randop) with arguments x and y.
(randexp)
答案 1 :(得分:2)
您拨打eval
的方式存在问题,在Racket中您必须在文件中执行此操作:
(define-namespace-anchor a)
(define ns (namespace-anchor->namespace a))
(define (randop)
(define x (random 3))
(cond
((= x 0) '+)
((= x 1) '-)
((= x 2) '*)))
(define (randexp ht)
(define x (random 10))
(define y (random 10))
(define z (randop))
(eval (list z y x) ns))
(randexp 1)
此外,您实际上并未使用ht
参数,请考虑将其删除。