如何在Chicken Scheme模块中定义可变参数函数?

时间:2011-10-19 05:15:18

标签: function module variadic-functions chicken-scheme

这是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)     <--

2 个答案:

答案 0 :(得分: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)非常活跃。如果您对鸡肉有疑问,他们是最好的回答。

答案 1 :(得分:0)

可变参数函数的点(.)语法在模块之间不可用;它在scheme模块中。创建自定义模块时,必须显式导入scheme模块以重新启用可变参数函数。

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