首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建可从csi访问的库

创建可从csi访问的库
EN

Stack Overflow用户
提问于 2015-03-10 10:26:23
回答 1查看 70关注 0票数 1

假设我在foo.scm中有一个库foo,如下所示:

代码语言:javascript
复制
(module foo (bar)
  (import scheme)

  (define (bar arg)
    (+ 5 arg)))

我有一个程序program.scm

代码语言:javascript
复制
(use foo)

(display (bar 2))

现在,我使用csc -J -library foo.scm编译foo并生成导入库,然后使用csc program.scm编译程序。运行程序显示"7",正如预期的那样,一切都很棒。然而,我想在解释器(csi)中以交互方式加载程序,但现在由于某种原因,每次调用foo中的函数都必须以foo#为前缀,即在解释器中(foo#bar 2)可以工作,但(bar 2)即使在源文件中使用也不能工作。

为什么会这样呢?这不仅有点烦人,我还担心我可能对Chicken中的模块系统的工作方式有误解,所以任何澄清都会非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2015-04-22 16:53:39

我不确定您所说的“将程序加载到解释器中”是什么意思,但是通常(use foo)应该加载和导入库,所以执行(load "program.scm")应该就是这样做的,并且foo导出的所有内容都应该在toplevel上可用。

听起来您似乎以某种方式结束了这样一种情况:库已加载到正在运行的系统中,但尚未导入以供在toplevel使用。只需在REPL中输入(use foo) (甚至是(import foo))就可以解决这个问题。

CHICKEN的模块系统被设计为允许单独编译,这使得交叉编译成为可能。为了实现这一点,导入库和实际实现是分开的,但正如您所发现的,这会使事情变得有点复杂。这是必要的,因为导入库可能定义编译时需要的宏,因此它需要在交叉编译主机上运行,而库本身需要在交叉编译目标的体系结构中可用。我们正在讨论如何简化鸡5,因为这是许多初学者(有时也包括高级用户)感到困惑的事情。

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

https://stackoverflow.com/questions/28955158

复制
相关文章

相似问题

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