drracket v6.8无约束

时间:2017-03-26 09:08:22

标签: scheme racket

我的Dr。Racket已更新至v6.8。 AFAIK nil是一个语言构造关键字,不应该被抱怨为未绑定的标识符

#lang racket

(define (enumerate-interval low high)
  (if (> low high)
      nil
      (cons low (enumerate-interval (+ 1 low) high))))

运行定义块时的确切错误消息是:

nil: unbound identifier in module in: nil

这与v6.8有什么不​​同吗?

1 个答案:

答案 0 :(得分:4)

自1991年发布R4RS nil以来,该标准尚未成为标准的一部分。查看PDF并查看包含语言更改的第38页。

#lang racket最初是R5RS,但今天它已完全演变成一种不同的方言。因此它的名称从Scheme变为Racket。您应该使用空列表文字'()或其中一个绑定nullemptyempty不在racket/base,因此您需要racket/list或使用#lang racket来获取更大的绑定集才能使用它。

如果你真的想使用nil作为表示空列表的全局绑定,你可以自己定义它:

(define nil '())

然而,commonlisper可能会误认为该值为#f