Scheme中的“未绑定标识符”错误

6

我正在使用来自以下网址的 DrScheme: http://www.archlinux.org/packages/extra/x86_64/drscheme/

我试图使用教材中的示例代码,但一直遇到“未绑定的标识符”错误。这是因为 Scheme 解释器配置不正确吗?还是代码有问题?

以下是几个示例:

输入:

#lang scheme
(define (equalimp lis1 lis2)
        (COND
         ((NULL? lis1) (NULL? lis2))
         ((NULL? lis2) '())
         ((EQ? (CAR lis1) (CAR lis2)) (equalimp (CDR lis1) (CDR lis2)))
         (ELSE '())
))

输出:

欢迎使用DrScheme,版本4.2.5 [3m]。语言:scheme;内存限制:128 MB。

扩展:在模块中未绑定标识符COND。

输入:

#lang scheme
(define (quadratic_roots a b c)
  (LET (
        (root_part_over_2a
         (/ (SQRT (- (* b b) (* 4 a c))) (* 2 a)))
        (minus_b_over_2a (/ (- 0 b) (* 2 a)))
       )
  (DISPLAY (+ minus_b_over_2a root_part_over_2a))
  (NEWLINE)
  (DISPLAY (- minus_b_over_2a root_part_over_2a))
  ))

输出:

扩展:模块中未绑定的标识符:LET

注意:我尝试使用LET*,因为我读到了这个链接:stackoverflow.com/questions/946050/using-let-in-scheme,但它产生了相同的错误。

谢谢!


你正在使用区分大小写的 #lang scheme。 - grettke
1个回答

7

看起来是语言设置的大小写敏感问题。我知道Scheme应该是不区分大小写的,但当我尝试时

(define (equalimp lis1 lis2)
        (cond
         ((null lis1) (null? lis2))
         ((null? lis2) '())
         ((eq? (car lis1) (car lis2)) (equalimp (cdr lis1) (cdr lis2)))
         (else '())
))

它完美地工作了。


实际上,我刚刚检查了R6RS,它现在是大小写敏感的!由于PLT是R6RS的主要支持者,我想这就是问题的根源。 - Nathan Shively-Sanders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接