为什么AND,OR会按预期工作,但XOR会显示错误?

问题描述 投票:-1回答:1
(define-syntax e.g.
  (syntax-rules (===>)
    ((e.g. proposition)
     (unless proposition
       (error "invalid proposition: "'proposition)))
    ((e.g. proposition ===> value)
     (let ((result proposition))
       (unless (equal? proposition value)
         (error "invalid proposition: "'proposition
                ", expected "value", got "result))))))

(define my-eval
  (let ((ns (make-base-namespace)))
    (lambda (expr) (eval expr ns))))

(e.g. (my-eval '(and #t #t)) ===> #t)
(e.g. (my-eval '(and #t #f)) ===> #f)
(e.g. (my-eval '(or #t #f)) ===> #t)
(e.g. (my-eval '(or #f #f)) ===> #f)
(e.g. (my-eval '(xor #t #t)) ===> #f)
(e.g. (my-eval '(xor #t #f)) ===> #t)

它对于AND,OR正常工作,但对于XOR:

XOR:未定义;无法在定义标识符之前引用标识符。

即使在REPL中即使强硬也能正常工作:

(xor #t #f)

t

logic scheme racket eval
1个回答
0
投票

您需要将提供racket/boolxor放入my-eval使用的名称空间。一种方法是在(my-eval '(require racket/bool))测试之前运行xor

© www.soinside.com 2019 - 2024. All rights reserved.