我在小鸡计划中玩了一会儿,但我发现了一些不寻常的东西。假设我有以下简单的源文件:
(define (f x)
(g x))
很明显(对于人豆而言)这是行不通的。当我启动csi
并手动输入此函数定义时,我收到以下消息:
Note: the following toplevel variables are referenced but unbound:
g (in f)
很高兴知道!在运行大型程序之前,最好在大型程序中找到拼写错误。现在,让我们重新启动csi
并尝试load
文件:
(load "test.scm")
输出:
; loading test.scm ...
Note: the following toplevel variables are referenced but unbound:
g (in f)
也很好。现在,让我们尝试csi
使用该文件启动!
$ csi test.scm
CHICKEN
(c) 2008-2015, The CHICKEN Team
(c) 2000-2007, Felix L. Winkelmann
Version 4.10.0 (rev b259631)
linux-unix-gnu-x86-64 [ 64bit manyargs dload ptables ]
compiled 2015-08-04 on yves.more-magic.net (Linux)
; loading test.scm ...
#;1>
呃……错误信息去哪儿了?为什么不存在?好吧,也许当我真正尝试编译它时它会抱怨......
$ csc test.scm
$
没有。即使我将行添加(f 2)
到文件末尾(以避免f
-function 被优化),我仍然没有收到任何类型的错误消息或警告。
为什么?解释器(或至少是其中的手动load
部分)如何立即注意到这个问题而编译器却不能?有趣的是-no-warnings
,编译器有一个参数。正如预期的那样,它什么都不做,因为没有警告。
我错过了什么?我该如何解决?它可以修复还是我必须在实际编译任何程序之前手动手动输入load
每个涉及的文件?csi