2011-10-19 38 views
0

这是一个鸡计划中的错误?如何在一个Chicken Scheme模块中定义一个可变参数函数?

#;1> (define (foo x . y) x) 
#;2> (foo 1 2 3) 
1 
#;3> (module bar (import scheme chicken) (define (foo x . y) x)) 

Error: invalid syntax in macro form: (foo x . y) 

     Call history: 

     <syntax>    (module bar (import scheme chicken) (define (foo x . y) x)) 
     <syntax>    (##core#module bar (import scheme chicken) (define (foo x . y) x)) 
     <syntax>    (define (foo x . y) x) 
     <syntax>    (foo x . y)  <-- 

回答

0

可变参数函数的点(.)语法在模块之间不可用;它位于scheme模块内。创建自定义模块时,必须明确导入scheme模块以重新启用可变参数功能。

#1;> (module bar (foo) (import scheme chicken) (define (foo x . y) x)) 
#2;> (import bar) 
#3;> (foo 1 2 3) 
1 
0

您的模块语法缺少要从模块中导出的符号列表。试试这个:

#1;> (module bar (foo) (import scheme chicken) (define (foo x . y) x)) 
#2;> (import bar) 
#3;> (foo 1 2 3) 
1 

注意声明模块名称后的(foo)。

我会补充说,mailing list和irc频道(freenode上的#chicken)非常活跃。如果您对鸡肉有疑问,他们是最好的地方让他们回答。

相关问题