| Автор | Сообщение |
gihar
164 сообщений |
#1611 2010-03-17 08:17 GMT+3 часа(ов) |
|
Не раз видел эту инструкцию - INTERN
Как ею можно пользоваться? Кто нить знает? |
|
|
Я все понял! И теперь мне пох... , что я все понял!
|
|
asbest
62 сообщений |
#1615 2010-03-17 12:47 GMT+3 часа(ов) |
|
GENSYM бывает, приходится использовать, INTERN тоже недалеко от него. Например тебе нужно обогатить язык чем-то вроде определения структуры (defstruct) - задаешь базовое имя (mystruct), а макрос придумывает новые символы на его основе (make-mystruct, mystruct-myslot ...), присваивает им значения, еще mystruct-slotcount, mystruct-slotlist можно придумать например и т.п., все автоматически.
|
|
misha
465 сообщений |
#1616 2010-03-17 12:48 GMT+3 часа(ов) |
|
Для создания символа из строки:
[1]> (setq name "MY-Name")А GENSYM для создания уникального ключа из строки или числа. отредактировал(а) misha: 2010-03-17 12:56 GMT+3 часа(ов) |
|
asbest
62 сообщений |
#1621 2010-03-18 09:31 GMT+3 часа(ов) |
|
Нашел у себя в коде INTERN.
Я создаю структуру данных с идентификаторами элементов - ключевыми словами. Некоторые элементы потом добавляются автоматически, при занесении новых данных. Им, при помощи INTERN, даются автоматические идентификаторы. |
|
gihar
164 сообщений |
#1628 2010-03-18 22:37 GMT+3 часа(ов) |
|
asbest:
покажи пример который у тебя свой, а то я тут пришел в никуда ?(defstruct cell x y vx vy) CELL ?(setq my-array (make-cell :x (intern "a") :y (intern "b") :vx (intern "c") :vy (intern "d") ) ) #S( CELL :X |a| :Y |b| :VX |c| :VY |d| ) ?(intern "dd") |dd| NIL ?(setf (symbol-value '|dd|) my-array) #S( CELL :X |a| :Y |b| :VX |c| :VY |d| ) ?(make-array '(1 2) :initial-element ' |dd| ) Думаю обмануть код и создать массив-структур и так не получится |
|
|
Я все понял! И теперь мне пох... , что я все понял!
|
|
asbest
62 сообщений |
#1630 2010-03-19 07:13 GMT+3 часа(ов) |
|
Нет, так не надо пользоваться INTERN.
Я использовал так (make-gd-file В результате создавался gd-file с идентификатором, например, 'FILE123. Но так может тоже не нужно делать, т.к. это лишняя нагрузка на таблицу символов, а таблица не для этого создана. Я не понял, что ты хочешь сделать. Вместо intern можно писать |a|, |b| но в чем смысл? И тебе правда нужен двумерный массив с одним измерением единичной длины? |
|
Fallen_s4e
106 сообщений |
#1631 2010-03-19 12:20 GMT+3 часа(ов) |
|
Вот интересно, многие функцию могут принимать:
'arg либо :arg либо "arg" Каким образом делаются преобразования? Можно конечно (to-upper (string x)) А потом сравнивать через string=, но думаю там есть более удобные средства. PS Кстати не нашел функции to-upper-case, не подскажите? |
|
asbest
62 сообщений |
#1633 2010-03-20 16:16 GMT+3 часа(ов) |
|
string-upcase
Функций, принимающих символ или строку не так много, не обращай на них внимания. Символы при чтении программы преобразуются в ссылки, эквивалентные указателям и потом (при выполнении программы) сравниваются не строки, а эти указатели, что гораздо эффективнее. |
|
Fallen_s4e
106 сообщений |
#1634 2010-03-20 18:02 GMT+3 часа(ов) |
|
Спасибо.
Конечно сравниваются через eq(l).=) |
|







