2014-11-11 3 views
1

Могу ли я определить макрос, который получит один параметр слева и один из правой части макроса? Я хочу, чтобы написать какую-то это в моих программах:Scheme макросы с двумя параметрами

(test = 10) 

определить новые переменные Я попытался написать этот макрос:

(define-syntax = 
    (syntax-rules() 
    ((a _ b) 
    (define a b)))) 

Но я получил ошибку «плохой синтаксис: = "

+0

Это, вероятно, частично зависит от того, какую реализацию схемы вы используете. Какая реализация схемы вы используете? –

+0

Кроме того, слово для этого является «infix», как в: «Я хочу определить оператор инфикса как макрос». Таким образом, у вас может быть больше удачи. –

+1

Даже с помощью макросов оператор приходит первым. В макросе '=' должен быть первый элемент, поэтому вы не можете сделать lisp infix и странным, как Algol, как это – Sylwester

ответ

-1

Поскольку форма определяется первым элементом, у вас возникнут проблемы с test, которые не связаны.

Правильный путь таков:

(= test 10) 

Вы пишете макрос так:

(define-syntax = 
    (syntax-rules() 
    ((_ a b) (define a b)))) 

Там вы идете. Без ужасного синтаксиса инфикса.

Смежные вопросы