2011-10-19 73 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)非常活躍。如果您對雞肉有疑問,他們是最好的地方讓他們回答。

相關問題