1

通过 Little Schemer,我们需要定义一些我们自己的函数。我已经定义了它们,加载后只有 add1 和 sub1 出现在 repl 中。我正在使用球拍 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 中时,它可以工作。有任何想法吗?

4

1 回答 1

0

由于您是 unsing#lang racket并且provide使用该文件的正确方法是使用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)).

于 2018-07-29T23:57:53.747 回答