某些功能未加载到 repl 中

Certain functions not loading into repl

通过 Little Schemer 工作, 我们需要定义一些我们自己的功能。 我已经定义了它们,加载后只有 add1 和 sub1 出现在 repl 中。我正在使用 Racket v7.0.

#lang racket                                                                                    


(provide atom? add1 sub1)                                                                       

(define atom?                                                                                   
  (lambda (x)                                                                                   
    (and (not (pair? x)) (not (null? x)))))                                                     

(define add1                                                                                    
  (lambda (x)                                                                                   
    (+ x 1)))                                                                                   

(define sub1                                                                                    
  (lambda (x)                                                                                   
    (- x 1))) 

我不明白为什么 (atom?) 没有加载。当我将 s-expression 复制粘贴到 repl 中时,它起作用了。有什么想法吗?

由于您正在取消 #lang racketprovide 使用该文件的正确方法是 require.

$ ls
toys.rkt

$ racket
Welcome to Racket v6.8.
> (require "toys.rkt")
> (atom? '())
#f

想象一下你编写了这样一个程序:

#lang racket

(require "toys.rkt")

(if (atom? 'test)
    'atom
    'no-atom)

您保存它并运行它:

$ racket program.rkt
'atom

另请注意,您可以使用 R6RS 并使 toys 成为一个库。然后你需要使用 plt-r6rs --install toys.rkt 然后使用 (import (rnrs base) (toys))