gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:58:07 24 4
gpt4 key购买 nike

我目前正在研究一组用 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

最佳答案

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

根据wiki ,如果你有文件 bar.scm,它依赖于文件 foo.scm,这就是你的方式,本质上,#include foo.scm 中的 bar.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 并因此编译它们,工作:

csc -c main.scm -o main.o
csc -c helper.scm -o helper.o
csc -o foobar main.o helper.o

关于c - 如何在编译代码中加载附件文件,Chicken Scheme,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22677321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com