如何在编译代码中加载附件文件,Chicken Scheme

时间:2014-03-27 02:47:20

标签: c compilation runtime-error chicken-scheme

我目前正在研究一套用Chicken Scheme编写的实用工具,这是我第一次尝试在Chicken Scheme中编写一个基于多文件的程序(或一组程序),而我是在确定如何正确使用附件文件中定义的代码时遇到一些麻烦,以便在编译所有内容时,文件A中编译的代码可以访问文件B中编译的代码。我基本上需要Chicken Scheme相当于以下C代码:

#include "my_helper_lib.h"
int
main(void)
{
  /* use definitions provided by my_helper_lib.h */
  return 0;
}

我尝试过使用以下所有内容,但是它们都产生了各种各样的错误,错误如:'()未定义,这没有意义,因为'()只是另一种方式写作(list)

;;; using `use`
(use "helper.scm") ;; Error: (require) cannot load extension: helper.scm

;;; using modules
;; helper.scm
(module helper (foo)
   (import scheme)
   (define foo (and (display "foobar") (newline)))) 
;; main.scm
(import helper) ;; Error: module unresolved: helper

;;; using `load`
(load helper.scm) ;; Error: unbound variable: helper.scm

(load "helper.scm") ;; Error: unbound variable: use
;; note: helper.scm contained `(use scheme)` at this point

;; using `require`
(require 'helper.scm) ;; Error: (require) cannot load extension: helper.scm

1 个答案:

答案 0 :(得分:3)

我不得不做一些挖掘,但我终于想出了如何做到这一点。

根据wiki,如果您的文件bar.scm依赖于文件foo.scm,那么您基本上就#include {{ 1 {} bar.scm

foo.scm
;;; bar.scm

; The declaration marks this source file as the bar unit.  The names of the
; units and your files don't need to match.
(declare (unit bar))

(define (fac n)
(if (zero? n)
  1
  (* n (fac (- n 1))) ) )

;;; foo.scm ; The declaration marks this source file as dependant on the symbols provided ; by the bar unit: (declare (uses bar)) (write (fac 10)) (newline) 放置在(declare (unit helper))helper.scm (declare (uses helper))并将其汇编成工作:

main.scm