Как загрузить и использовать файл .rkt в REPL командной строки Racket? - PullRequest
2 голосов
/ 29 марта 2020

Я на Ubuntu 18.04, использую Racket 7.6. Я создал этот файл, hello.rkt:

#lang racket

(define (hello) 'hello-world)
(hello)

Затем я вызвал его:

> racket hello.rkt
'hello-world

Отлично. Затем я попытался загрузить код в REPL и использовать его:

> racket -i hello.rkt
Welcome to Racket v7.6.
> (hello)                          ; the function is unavailable here
; hello: undefined;
;  cannot reference an identifier before its definition
;   in module: top-level
; [,bt for context]
> (load "hello.rkt")               ; load gives no error, but ...
> (hello)                          ; the function is unavailable here
; hello: undefined; ...
> (require "hello.rkt")            ; require gives no error ...
'hello-world                       ; and runs (hello), but ...
> (hello)                          ; the function is unavailable here
; hello: undefined; ...
> (include "hello.rkt")            ; include gives no error, but ...
> (hello)                          ; the function is unavailable here
; hello: undefined; ...
> (enter! "hello.rkt")             ; enter! gives no error, but ...
"hello.rkt"> (enter! "other.rkt")  ; if I enter! another file ...
"other.rkt"> (hello)               ; the hello function is unavailable here
; hello: undefined; ...

Вкратце: как загрузить файлы и использовать их содержимое в контексте REPL командной строки верхнего уровня?

1 Ответ

1 голос
/ 31 марта 2020

Согласно https://docs.racket-lang.org/guide/intro.html, вы можете «имитировать традиционную среду Lisp», опуская объявление #lang и используя (load <file>) в REPL. Когда я удаляю строку #lang из файла, я получаю следующее взаимодействие:

> racket
Welcome to Racket 7.6.
> (load "hello.rkt")
'hello-world
> (hello)
'hello-world

Страница действительно"настоятельно рекомендует" отказаться от практики, предпочитая код на основе модулей.

...