racketthe-little-schemer

Certain functions not loading into repl


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?


Solution

  • 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)).