Развёрнутый сишный макрос для псевдо-лисп выражения 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... )
Comments 11
Reply
Reply
Reply
Reply
Reply
Reply
или инлайны
Reply
Все ссылки - это просто индексы в массиве, эта идея в самом деле оказалась удобна.
Поэтому, если 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
Reply
Reply
типа:
-я тут скрипт написал который там чота делает. (строка хаотичных символов на пол экрана)
-....
-И это только первая строка!
-!!!!???!!!
Reply
Leave a comment