某些功能未加载到repl中

时间:2018-07-29 08:57:21

标签: racket the-little-schemer

通过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))) 

我无法弄清楚为什么不加载(原子?)。当我复制粘贴s表达式到repl时,它可以工作。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

由于取消#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))