Как определить переменную функцию в модуле Chicken Scheme? - PullRequest
0 голосов
/ 19 октября 2011

Это ошибка в Цыпленке?

#;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 голосов
/ 19 октября 2011

Синтаксис с точками (.) для функций с переменными параметрами недоступен в разных модулях; это внутри модуля scheme. Когда вы создаете пользовательский модуль, вы должны явно импортировать модуль scheme в повторно включаемые функции переменной.

#1;> (module bar (foo) (import scheme chicken) (define (foo x . y) x))
#2;> (import bar)
#3;> (foo 1 2 3)
1
0 голосов
/ 19 октября 2011

В вашем синтаксисе модуля отсутствует список символов для экспорта из модуля. Попробуйте это:

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

Обратите внимание на (foo) после объявления имени модуля.

Я добавлю, что список рассылки и канал irc (#chicken on freenode) очень активны. Если у вас есть вопросы о курице, это лучшее место, где можно получить ответы.

...