AZ
(let ((x v)...) e...) = ((lambda (x...) e...) v...)а let с именем это сахар над лямбдой с комбинатором неподвижной точки
let f ((x v)...) e...) = ((fix (lambda (f x...) e...)) v...))
Size: a a a
AZ
(let ((x v)...) e...) = ((lambda (x...) e...) v...)а let с именем это сахар над лямбдой с комбинатором неподвижной точки
let f ((x v)...) e...) = ((fix (lambda (f x...) e...)) v...))
PG
b⛅
PG
b⛅
AZ
b⛅
PG
PG
m
PG
V(
macroexpand
и macroexpand-1
, а больше нищиго и нет.AK
macroexpand
и macroexpand-1
, а больше нищиго и нет.m
P1
P1
...мы можем ответить на вопрос, который рано или поздно задает себе любой начинающий программист на scheme: "Зачем нужны гигиенические макросы? Неужели это очередная необоснованная блажь сообщества программистов на scheme?" Ответ заключается в том, что гигиеничность системы макросов обеспечивает сохранность концепций, положенных в основу языка. Естественно, программисту позволено принимать какие угодно решения, однако у него перед глазами есть syntax-rules, применяя который, он может быть уверен в том, что расширяет язык простым и понятным для своих коллег способом (т.е. не ломает привычную для scheme семантику). Так называемые макросы в стиле common lisp не могут дать таких гарантий.
AZ
...мы можем ответить на вопрос, который рано или поздно задает себе любой начинающий программист на scheme: "Зачем нужны гигиенические макросы? Неужели это очередная необоснованная блажь сообщества программистов на scheme?" Ответ заключается в том, что гигиеничность системы макросов обеспечивает сохранность концепций, положенных в основу языка. Естественно, программисту позволено принимать какие угодно решения, однако у него перед глазами есть syntax-rules, применяя который, он может быть уверен в том, что расширяет язык простым и понятным для своих коллег способом (т.е. не ломает привычную для scheme семантику). Так называемые макросы в стиле common lisp не могут дать таких гарантий.
A
A
C