如何在单独的目录中使用 Chicken Scheme 模块?

How to use a Chicken Scheme module in a separate directory?

我有以下项目结构:

.
├── main.scm
└── stream
    ├── stream.import.scm
    ├── stream.scm
    └── stream.so

stream.scm定义了一个模块:

; stream.scm
(module stream
  (...)
  (import scheme (chicken base))
  ...)

main.scm 使用 stream 模块:

; main.scm
(import stream)
...

我通过 csc -s stream.scm -j stream 编译了 stream。 我想使用嵌套在 stream 目录中的 stream 模块来编译 main.scm,但我找不到这样做的方法。

我阅读了手册页并尝试了

csc main.scm -I ./stream

但是提示警告

Warning: the following extensions are not currently installed: stream

并且可执行文件不工作:

Error: (require) cannot load extension: stream
...

当我将 main.scm 放入 stream 目录时它确实有效。

我应该怎么做才能让 main.scm 知道 stream 模块?

我想你可能想为这个项目设置 CHICKEN_REPOSITORY_PATH

示例:

~/dev/scheme/subdir_test$ chicken-install -repository
/home/richardh/dev/chicken/lib/chicken/11

~/dev/scheme/subdir_test$ export CHICKEN_REPOSITORY_PATH="/home/richardh/dev/chicken/lib/chicken/11:/home/richardh/dev/scheme/subdir_test/sub/"
~/dev/scheme/subdir_test$ cat alpha.scm 
(import beta)

(print "Hello " (hello_name))
~/dev/scheme/subdir_test$ cat sub/beta.scm 
(module beta (hello_name)

  (import scheme)

  (define (hello_name)
    "World")
)
~/dev/scheme/subdir_test$ cd sub/
~/dev/scheme/subdir_test/sub$ csc -s beta.scm -j beta
~/dev/scheme/subdir_test/sub$ cd ..
~/dev/scheme/subdir_test$ csc alpha.scm 
~/dev/scheme/subdir_test$ ./alpha 
Hello World

如果你google“chicken scheme virtualenv”你会发现几个更复杂版本的例子。

如果您想安装多个版本的 chicken 本身,您可能还对“chicken-belt”和“dust”鸡蛋感兴趣http://wiki.call-cc.org/chicken-projects/egg-index-5.html#tools