首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Guile中定义两个R7RS库

如何在Guile中定义两个R7RS库
EN

Stack Overflow用户
提问于 2021-09-24 08:38:23
回答 1查看 76关注 0票数 1

我有这两个R7RS库,我将它们逐个输入到Guile REPL中:

代码语言:javascript
复制
(define-library (example one)
  (import (scheme base))
  (export f)
  (begin
    (define (f x)
      (+ x 1))))

(define-library (example two)
  (import (scheme base))
  (export g)
  (begin
    (define (g x)
      (* x 2))))

当我在Guile REPL中输入第二个库定义时,我得到这个错误:

代码语言:javascript
复制
While compiling expression:
Syntax error:
unknown file:13:4: definition in expression context, where definitions are not allowed, in form (define (g x) (* x 2))

我试图将这两个库放到同一个文件(mylibs.sld)中并运行guile mylibs.sld,但我得到了完全相同的错误。

据我所知,我之所以得到这个错误,是因为当Guile读取第二个库定义时,define-library不知何故变得未定义。Guile不再知道define-library是什么意思。这是一种奇怪的行为。怎么一回事?如何在REPL中定义两个R7RS库?

Guile版本: 3.0.1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-25 05:52:36

如果只想在repl中定义它们,可以通过将当前模块设置为(guile-user)来实现。正如您所猜测的那样,在第一次define-library之后,编译器处于这样一种状态,即(guile-user)中默认可用的符号不可用。

因此,如果您在定义两个库之间执行一次,m (guile-user),您将会很好。

代码语言:javascript
复制
scheme@(guile-user)> (define-library (example one)
  (import (scheme base))
  (export f)
  (begin
    (define (f x)
      (+ x 1))))
scheme@(example one)> ,m (guile-user)
scheme@(guile-user)> (define-library (example two)
  (import (scheme base))
  (export g)
  (begin
    (define (g x)
      (* x 2))))
scheme@(example two)> ,m (guile-user)
scheme@(guile-user)> (use-modules (example one) (example two))
scheme@(guile-user)> (f 12)
$1 = 13
scheme@(guile-user)> (g 9)
$2 = 18
scheme@(guile-user)>

我不确定如何在单个文件中实现这一点(每个文件的lib行得很好)。我试图在第一个库之后用eval-when将当前模块设置为(guile-user),但即使是符号eval-when也不可用。一定是个窃听器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69311991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档