"未找到模块"在Guile

时间:2017-08-08 18:25:21

标签: scheme guile

我在Guile上写了一个扩展脚本,用于" Gnubik"程序并获得"模块未找到"尝试使用函数时出错" get-string-all"来自" textual-ports" module:当我从命令行启动Gnubik时,会打印错误文本并且程序不会启动。当在Guile shell脚本中使用此函数时 - 这个问题不会发生。我安装了两个Guile软件包:2.0和2.2。

错误文本如下:

Backtrace:
In ice-9/boot-9.scm:
 160: 10 [catch #t #<catch-closure c86380> ...]
In unknown file:
   ?: 9 [apply-smob/1 #<catch-closure c86380>]
In ice-9/eval.scm:
 505: 8 [#<procedure b5e540 at ice-9/eval.scm:499:4 (exp)> (use-modules #)]
In ice-9/psyntax.scm:
1107: 7 [expand-top-sequence ((use-modules (ice-9 textual-ports))) () ...]
 990: 6 [scan ((use-modules (ice-9 textual-ports))) () ...]
 279: 5 [scan ((# #) #(syntax-object *unspecified* # #)) () (()) ...]
In ice-9/boot-9.scm:
3622: 4 [process-use-modules (((ice-9 textual-ports)))]
 712: 3 [map #<procedure c1ab40 at ice-9/boot-9.scm:3622:25 (mif-args)> ((#))]
3623: 2 [#<procedure c1ab40 at ice-9/boot-9.scm:3622:25 (mif-args)> (#)]
2903: 1 [resolve-interface (ice-9 textual-ports) #:select ...]
In unknown file:
   ?: 0 [scm-error misc-error #f ...]

ERROR: In procedure scm-error:
ERROR: no code for module (ice-9 textual-ports)

Guile代码:

(use-modules (ice-9 textual-ports))

(call-with-input-file "/tmp/tst.txt" 
    (lambda (port)
        (define s (get-string-all port))))

如何纠正这个问题?

1 个答案:

答案 0 :(得分:2)

根据文档&#39;(use-modules(rnrs io ports))&#39;。

适合我。

编辑:在查看guile-2.0时,我发现get-string-all由&#39;(rnrs io端口)&#39;提供。模块,但在guile-2.2中,它由两个(rnrs io端口)&#39;提供。和&#39;(ice-9 textual-ports)&#39;模块。

所以有两个问题。首先,你试图加载&#39;(ice-9 textual-ports)&#39; guile-2.0中的模块,由于它仅由guile-2.2提供,因此无法工作。其次,你的lambda表单中没有表达式,只需要返回get-string-all应用程序的值。