Hy, Для собственного использования я создал модуль Python (Espy), который позволяет определять макросы с аргументами, циклами и генерацией условного кода: вы создаете файл source.espy, затем запускаете соответствующую функцию, затем генерируется source.py.
Он допускает следующий синтаксис:
macro repeat(arg1):
for i in range(%arg1%):
socket
print "stop"
...
repeat(5):
print "Hi everybody"
print "See you soon"
эквивалентно:
...
for i in range(5):
print "Hi everybody"
print "See you soon"
print "stop"
Другой синтаксис:
macro doit(arg1):
for i in %arg1%:
socket suit(arg2):
socket
print %arg2%
socket check(arg3):
if %arg2%==%arg3%:
socket
...
#use
doit(range(10)):
suit(result):
result=i*i
check(result,25):
print "I knew that 5*5 == 25"
эквивалентно:
for i in range(10):
result=i*i
print result
if result==25:
print "I knew that 5*5 == 25"
Еще у Espy есть 2 функции: "макрос для" и "макрос если". Пример:
macro for v in [6,10,12,20,23]:
macro if 7<%v%<22:
True:
print "At %v%, I'm awake."
False:
print "At %v%, I'm sleeping."
переводится Эспи на:
print "At 6, I'm sleeping."
print "At 10, I'm awake."
print "At 12, I'm awake."
print "At 20, I'm awake."
print "At 23, I'm sleeping."
Полную документацию и бесплатную загрузку можно найти здесь: http://elp.chronocv.fr
Я использую этот модуль во многих случаях. Это позволяет использовать более структурированные и короткие коды. С его помощью я сгенерировал 65000 строк четкого и эффективного кода Python из 1000 строк шпионского кода для нового проекта шахматного движка (все еще в процессе).
Если бы Python мог включать макросы в будущую версию, это стало бы более впечатляющим.
person
elp
schedule
01.06.2011