Racket 如何';要求';一个不带';你没有头条线吗?

Racket 如何';要求';一个不带';你没有头条线吗?,racket,Racket,作为众多可能的示例之一,除了Racket需要的#lang mini-Java头之外,它将是一个完全有效的Java程序 例如,如果我用Racket作为Racket模块语言编写了一个Java解释器/编译器,我怎么能说,“require这个文件Main.Java,它是用模块语言mini Java编写的,但没有任何特定于Racket的头” (请注意,我在Racket方面几乎没有任何实际经验。我正在评估Racket+DrRacket的一个特定用例,顺便说一句,它与Java无关。我搜索了文档,但找不到实现这

作为众多可能的示例之一,除了Racket需要的
#lang mini-Java
头之外,它将是一个完全有效的Java程序

例如,如果我用Racket作为Racket模块语言编写了一个Java解释器/编译器,我怎么能说,“
require
这个文件
Main.Java
,它是用模块语言
mini Java
编写的,但没有任何特定于Racket的头”


(请注意,我在Racket方面几乎没有任何实际经验。我正在评估Racket+DrRacket的一个特定用例,顺便说一句,它与Java无关。我搜索了文档,但找不到实现这一点的任何方法。)

我现在无法运行或测试它,但也许你可以从这里开始,尝试一下。它的主要用途是:


该表格可能对您有所帮助;我现在无法尝试,但也许你可以尝试一下it@AlexKnauth为了让你的答案发挥作用,我在搜索过程中发现了一个基本相同的问题。它似乎在运行时使用
eval语法
dynamic require
使用动态机制来读取、编译和评估迷你java。这将对其求值并将其放入命名空间中,但是如果mini-java程序提供标识符,那么这些标识符在文件的其余部分将不可用,例如,如果您提供了
(require racket/list)
include/reader
表单将在编译时读取和编译mini-java,并将它提供的任何标识符提供给需要的文件。谢谢!!似乎在正确的轨道上,但还不能让它工作,我得到了错误“include/reader:read error(read:#lang未在当前上下文中启用)”。这与参数有关吗?我尝试在一些地方使用
(parameterize([read accept reader#t])…something…
,但这似乎不起作用…调用带有模块读取参数化的
应该在其thunk体内将
read accept reader
参数设置为true,在该主体中调用
读取语法
,这是需要的。。。除非有另一个调用读卡器的上下文,否则我没有专门用
#lang mini java
对它进行测试,但我只是用
#lang sweet exp racket
对它进行了测试,发现了一个无限循环错误,我刚刚在编辑中修复了它。它现在正在为这种语言工作。。。我不确定
#lang mini-java
有什么不同,你能告诉我一些关于这方面的信息吗?mini-java只是一个例子。我试图让您的示例代码与
#lang sweet exp racket
一起工作,但仍然会出现相同的错误。我的源代码:(rev 1)。我使用的是DrRacket版本6.11[3m](在Linux上),而我看到的最新版本是7.2。这会是一个6对7的问题吗?[我将尝试使用7.2,并尝试上面的代码。]
#lang racket
(require racket/include
         syntax/parse/define
         (for-syntax racket/syntax
                     racket/port
                     syntax/modread))

(define-simple-macro (require/mini-java path)
  #:with modname (generate-temporary #'path)
  (begin
    (include/reader path (mini-java-reader 'modname))
    (require 'modname)))

(begin-for-syntax
  ;; Symbol -> [Any InputPort -> Syntax]
  (define ((mini-java-reader modname) src input)
    (cond
      [(port-closed? input) eof]
      [else
       (define stx
         (with-module-reading-parameterization
           (lambda ()
             (read-syntax src
               (input-port-append #t
                 (open-input-string "#lang mini-java\n")
                 input)))))
       (close-input-port input)
       (syntax-parse stx
         [(module _ l . b)
          #`(module #,modname l . b)])])))