Расширение синтаксиса Schemes выдает ошибку «требуется правильный список»

#scheme

#схема

Вопрос:

Я пытаюсь использовать библиотеку Scheme (afp primitives) в Repl.it , просто скопировав все процедуры в main.scm. Но некоторые процедуры, похоже, не работают. Например rec , процедура определяется следующим образом:

 (define-syntax rec
  (syntax-rules ()
    ((rec (name . variables) . body)
     (letrec ((name (lambda variables . body))) name))
    ((rec name expression)
     (letrec ((name expression)) name))))
 

Когда я просто определяю его, компилятор выдает следующую ошибку:

 proper list required for function application or macro use: (name . variables) []
 

Поскольку я только начинаю изучать Scheme, я понятия не имею, как это исправить. Может кто-нибудь мне помочь?


Редактировать — это ситуация:

введите описание изображения здесь

Комментарии:

1. когда вы пытаетесь его использовать ….. как? пожалуйста, скопируйте и вставьте ваше взаимодействие, то есть ваш ввод и (ошибочный) ответ из REPL.

2. @WillNess: добавлено изображение. Другими словами, просто определите процедуру, при которой возникает ошибка компилятора.

3. какую процедуру вы определяете? есть ли у вас какой-либо собственный код во входном источнике, помимо кода, который вы скопировали из библиотеки? кроме того, не могли бы вы предоставить ссылку на свой Repl.it вход?

4. Нет, на данный момент у меня нет собственного кода. Repl.it это: repl.it/@Jacobvan6/Scheme-trials#main.scm .

5. ваш код работает так, как есть в DrRacket. это должно быть repl.it . (?) cf , который также работает в Racket, но не работает в repl.it .

Ответ №1:

Согласно вашим скриншотам, repl.it использует схему Бива.

Из его списка функций

BiwaScheme не имеет syntax-rules или syntax-case

Таким образом, вы не можете использовать syntax-rules с ним макросы, как вы пытаетесь. Необходимо найти другой подход rec или использовать другую схему.