Как использовать модуль Chicken Scheme в отдельном каталоге?

#scheme #chicken-scheme

#схема #chicken-scheme

Вопрос:

У меня следующая структура проекта:

 .
├── 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)
...
  

Я скомпилировал stream через csc -s stream.scm -j stream .
Я хотел бы скомпилировать модуль main.scm с использованием stream модуля, вложенного в stream каталог, но я не могу найти способ сделать это.

Я прочитал справочную страницу и попытался

 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 модуле?

Ответ №1:

Я думаю, вы, вероятно, хотите установить 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
  

Если вы загуглите «chicken scheme virtualenv», вы найдете несколько примеров более сложных версий этого.

Вас также могут заинтересовать яйца «куриный пояс» и «пыль» http://wiki.call-cc.org/chicken-projects/egg-index-5.html#tools если вы хотите установить несколько версий самого chicken.