Некоторые функции не загружаются в репл
Работая через 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))
,