Certain functions not loading into repl

104 Views Asked by At

Working through Little Schemer, We're required to define a few of our own functions. I've defined them, only add1 and sub1 appear in the repl after it loads. I'm using 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))) 

I cannot figure out why (atom?) does not load. When I copy paste the s-expression into repl it works. Any ideas?

1

There are 1 best solutions below

0
On BEST ANSWER

Since you are unsing #lang racket and provide the correct way to use the file is with require.

$ ls
toys.rkt

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

So imagine you make a program like this:

#lang racket

(require "toys.rkt")

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

You save it and run it:

$ racket program.rkt
'atom

Also note that you can use R6RS and make toys a library. You then need to use plt-r6rs --install toys.rkt and then use (import (rnrs base) (toys)).