(Untitled)

Jan 12, 2016 03:21

Развёрнутый сишный макрос для псевдо-лисп выражения CADDR(proto):

(((((((((proto == (uclptr_t)~0))?(uclptr_t)~0:m->uclmem[proto].container.cdr) == (uclptr_t)~0))?(uclptr_t)~0:m->uclmem[(((proto == (uclptr_t)~0))?(uclptr_t)~0:m->uclmem[proto].container.cdr)].container.cdr) == (uclptr_t)~0))?(uclptr_t)~0:m->uclmem[((((((proto == (uclptr_t)~0))?( ( Read more... )

uncommon lisp

Leave a comment

Comments 11

valenock January 12 2016, 00:46:35 UTC
Со всевозможными праздниками! Если ты есть в фейсбуке - дай координаты

Reply

kincajou January 12 2016, 02:25:27 UTC
Меня там нет, пардон.

Reply


qlman January 12 2016, 02:58:21 UTC
А это точно не для того чтобы дьявола вызвать? :)

Reply

kincajou January 12 2016, 03:05:26 UTC
только если cyberdemon

Reply


psilogic January 12 2016, 05:50:30 UTC
это такой хитрый способ чтобы года череp 3 в собственном коде не разобраться :))

Reply

kincajou January 12 2016, 14:05:16 UTC
Нет, разумеется. Это развёрнутый макрос - то, во что он превращается после препроцессора. А дщо этого он вполне безобиден.

Reply

psilogic January 12 2016, 14:41:39 UTC
препроцессор тут напрашивается, да

или инлайны

Reply

kincajou January 12 2016, 14:56:25 UTC
Нет, это именно результат работы препроцессора.
Все ссылки - это просто индексы в массиве, эта идея в самом деле оказалась удобна.
Поэтому, если lst это список и я хочу получить его первый элемент, ( в лиспе это (car lst)), то пишу макрос CAR(lst), а он разворачивается в
(((lst == (uclptr_t)~0))?(uclptr_t)~0:m->uclmem[lst].container.car)

Выражение, выделенное болдом - (uclptr_t)~0 - это просто запись константы NIL. Остальное тривиально: если lst это NIL, то возвращаем NIL, в ином случае смотрим в массив m->uclmem по индексу lst, и достаём значение из поля .car структуры .container :)

Reply


handed_n January 12 2016, 07:18:36 UTC
и это только первая строчка!

Reply

kincajou January 12 2016, 15:01:05 UTC
строчек уже на много десятков килобайт кода. Немного, но я только начал.

Reply

handed_n January 12 2016, 16:09:04 UTC
это старый прикол с баша)
типа:

-я тут скрипт написал который там чота делает. (строка хаотичных символов на пол экрана)
-....
-И это только первая строка!
-!!!!???!!!

Reply


Leave a comment

Up