Синтаксические сладости

Jan 01, 2010 15:22

Кросс-пост: http://lisper.ru/forum/thread/134

Предлагаю просто поделиться удобными и красивыми синтаксическими трюками, может даже целыми подходами.

Вот, например, if с bind'ингом и it'ом:

(defun iif-lform-gather (lst ( Read more... )

Leave a comment

Comments 16

banan December 31 2009, 13:38:33 UTC
предлагаю поделиться еще и комментариями

Reply

ander_skirnir December 31 2009, 19:05:31 UTC
Внутри кондишона iif'а можно биндить куски кода переменным и затем использовать в конечных.
(iif (< (:bind xx (+ 12 x)) 34) (1+ xx) (-1 xx))
(:bind xx (+ 12 x)) - значит забиндить xx'у в (+ 12 x) в одной из конечных, в текущей же форме-предикате оно заменится на (+ 12 x)

Макроекспанд будет выглядеть так:
(LET ((IT (< (+ 12 X) 34)) (XX (+ 12 X))) (IF IT (1+ XX) (-1 XX)))

Этот макрос решает проблему, которая меня много раз дико раздражала: когда в условии if'а большой кусок кода, который необходимо дублировать в конечных его формах.

Кстати, макросы с захватом переменных где-то даже как-то по-хитрому обзывали - вроде бы на букву "э".

Reply

; banan January 1 2010, 14:22:07 UTC
;

Reply


freiksenet December 31 2009, 14:23:55 UTC
Variable capturing ой опасен.

Reply

ander_skirnir December 31 2009, 18:51:34 UTC
На интуитивном уровне мне тоже так кажется, но у Вас может и примеры есть?

Reply

freiksenet December 31 2009, 18:58:16 UTC
Есть проблемы с вложенными макро, плюс символ it может начать конфликтовать с другим символом it если вы не один такой умный )

Reply

ander_skirnir December 31 2009, 19:12:07 UTC
Насчёт вложенных - это да, но я пока не встречал макросов, в которых бы использовались формы с головой-кейвордом :bind. А на счёт it'ов - мне кажется, если делать без особых извратов, то один будет затеняться другим где надо.

Reply


ander_skirnir December 31 2009, 19:32:26 UTC
Кстати, на лиспере был такой эпичный тред: http://lisper.ru/forum/thread/49
Товарищ предлагал очень интересные и даже где-то гениальные синтаксические извраты.

Reply


ln_123 January 7 2010, 08:57:36 UTC
Большинство простых общеупотребительных форм уже были придуманы до нас :)
Поэтому наверное стоит посмотреть уже существующие пакеты например:
anaphora, matabang-bind, hu.dwim.defclass-star, hu.dwim.syntax-sugar

Reply


dhanesh_conzal July 11 2010, 09:37:22 UTC
ander-skirnir. весело

Reply


Leave a comment

Up