我正在使用Cloud9托管的工作空间上使用Chicken Chicke 4.9.0.1,该工作区是由源构建的。
我正在尝试使用它(我主要是用Python编码的,所以我对怪异的Parens语法表示歉意):
(define load-module
(lambda (filepath)
(begin
(load filepath)
)
)
)
(define print
(lambda (command)
(begin
(display command)
(newline)
)
)
)
(load-module "../src/Basics.scm")
(print (exponent 5 2))
指数是:
(define (exponent num pow)
(if (equal? pow 1)
num
(* num (exponent num (- pow 1))
)
)
)
但它给我以下错误:
Started /home/ubuntu/workspace/test.scm
CHICKEN
(c) 2008-2014, The Chicken Team
(c) 2000-2007, Felix L. Winkelmann
Version 4.9.0.1 (stability/4.9.0) (rev 8b3189b)
linux-unix-gnu-x86-64 [ 64bit manyargs dload ptables ]
bootstrapped 2014-06-07
; loading /home/ubuntu/workspace/project1/src/test.scm ...
; loading ../src/Basics.scm ...
Error: unbound variable: pow
Call history:
<eval> [append] (cons item (reverse target))
<eval> [append] (reverse target)
<eval> [append] (reverse (cons item (reverse target)))
<eval> [append] (cons item (reverse target))
<eval> [append] (reverse target)
<eval> [append] (reverse (cons item (reverse target)))
<eval> [append] (cons item (reverse target))
<eval> [append] (reverse target)
<eval> [append] (reverse (cons item (reverse target)))
<eval> [append] (cons item (reverse target))
<eval> [append] (reverse target)
<syntax> (print (exponent 5 2))
<syntax> (exponent 5 2)
<eval> (print (exponent 5 2))
<eval> (exponent 5 2)
<eval> [exponent] (equal? pow 1) <--
我在其他方案实施方案(Biwascheme,使用其在线替补)上尝试了相同的过程,并且它起作用。当我将代码直接添加到我正在处理的文件中而没有从单独的文件中加载它时,则可以工作。
为什么只有从单独的文件加载时才会给出该无绑定的可变错误?
对我来说很好。在Ubuntu上编译了带有相同版本的鸡肉,直到特定的修订。
您的电话历史看起来很奇怪。更具体地说:
<eval> [append] (reverse target)
<syntax> (print (exponent 5 2))
[append] (reverse target)
部分看起来很奇怪。您的指数函数(如上所述)不称呼它。即使假设历史记录是错误的,实际上是在print
功能中,我已经检查了library.scm
,并且历史也没有意义。
这使我相信加载的Basics.scm
文件不是您期望的,而您最终获得了exponent
的不同,不工作的版本。
您可以要求鸡肉显示文件的内容以确保。诸如:
之类的东西(with-input-from-file "../src/Basics.scm"
(lambda ()
(display (read))))
结果应与预期的内容匹配。