Некоторые функции не загружаются в репл

Работая через 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 ответ

Решение

Так как вы не используете #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)),

Другие вопросы по тегам