Comment définissez-vous une fonction variadique dans un module Schéma de poulet?
-
26-10-2019 - |
Question
Est-ce un bug dans le schéma de poulet?
#;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) <--
La solution 2
La syntaxe point (.
) pour les fonctions variadique ne sont pas disponibles dans les modules; il est à l'intérieur du module scheme
. Lorsque vous créez un module personnalisé, vous devez importer explicitement le module scheme
aux fonctions variadique réactiver.
#1;> (module bar (foo) (import scheme chicken) (define (foo x . y) x))
#2;> (import bar)
#3;> (foo 1 2 3)
1
Autres conseils
Votre syntaxe du module est manquant la liste des symboles à exporter à partir du module. Essayez ceci:
#1;> (module bar (foo) (import scheme chicken) (define (foo x . y) x))
#2;> (import bar)
#3;> (foo 1 2 3)
1
Notez que le (foo) après avoir déclaré le nom du module.
Je vais ajouter que la liste de diffusion et canal irc (#chicken sur freenode) sont très actifs. Si vous avez des questions au sujet du poulet, ils sont les meilleurs endroits pour obtenir des réponses.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow