> 1 <

Автор Сообщение

gihar

Moderators


Статус

164 сообщений

Где: --- где? где? в Катманду
Род занятий: под-Гондурашиваю в свободное от нихера-не-делания время
Возраст: 128

#1611   2010-03-17 08:17 GMT+3 часа(ов)      
Не раз видел эту инструкцию - INTERN

Как ею можно пользоваться?

Кто нить знает?
Я все понял! И теперь мне пох... , что я все понял!

asbest

Members


Статус

62 сообщений

Где: Russia
Род занятий:
Возраст:

#1615   2010-03-17 12:47 GMT+3 часа(ов)      
GENSYM бывает, приходится использовать, INTERN тоже недалеко от него. Например тебе нужно обогатить язык чем-то вроде определения структуры (defstruct) - задаешь базовое имя (mystruct), а макрос придумывает новые символы на его основе (make-mystruct, mystruct-myslot ...), присваивает им значения, еще mystruct-slotcount, mystruct-slotlist можно придумать например и т.п., все автоматически.

misha

Members


Статус

465 сообщений

Где: Yemen
Род занятий:
Возраст:

#1616   2010-03-17 12:48 GMT+3 часа(ов)      
Для создания символа из строки:
[1]> (setq name "MY-Name")
"MY-Name"
[2]> (cons (intern name) 67)
(|MY-Name| . 67)
А GENSYM для создания уникального ключа из строки или числа.

отредактировал(а) misha: 2010-03-17 12:56 GMT+3 часа(ов)

asbest

Members


Статус

62 сообщений

Где: Russia
Род занятий:
Возраст:

#1621   2010-03-18 09:31 GMT+3 часа(ов)      
Нашел у себя в коде INTERN.
Я создаю структуру данных с идентификаторами элементов - ключевыми словами. Некоторые элементы потом добавляются автоматически, при занесении новых данных. Им, при помощи INTERN, даются автоматические идентификаторы.

gihar

Moderators


Статус

164 сообщений

Где: --- где? где? в Катманду
Род занятий: под-Гондурашиваю в свободное от нихера-не-делания время
Возраст: 128

#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

Members


Статус

62 сообщений

Где: Russia
Род занятий:
Возраст:

#1630   2010-03-19 07:13 GMT+3 часа(ов)      
Нет, так не надо пользоваться INTERN.

Я использовал так

                    (make-gd-file 
:id (intern (format nil "FILE~D" k) 'keyword)
:place (rect x y (+ x 200) (+ y 100))
:visopt 4)))


В результате создавался gd-file с идентификатором, например, 'FILE123. Но так может тоже не нужно делать, т.к. это лишняя нагрузка на таблицу символов, а таблица не для этого создана.

Я не понял, что ты хочешь сделать. Вместо intern можно писать |a|, |b| но в чем смысл? И тебе правда нужен двумерный массив с одним измерением единичной длины?

Fallen_s4e

Members


Статус

106 сообщений
http://lisper.ru
Где: Zimbabwe lisper.ru
Род занятий: fallen_s4e
Возраст: 133

#1631   2010-03-19 12:20 GMT+3 часа(ов)      
Вот интересно, многие функцию могут принимать:
'arg либо
:arg либо
"arg"
Каким образом делаются преобразования?
Можно конечно
(to-upper (string x))
А потом сравнивать через string=, но думаю там есть более удобные средства.
PS Кстати не нашел функции to-upper-case, не подскажите?

asbest

Members


Статус

62 сообщений

Где: Russia
Род занятий:
Возраст:

#1633   2010-03-20 16:16 GMT+3 часа(ов)      
string-upcase

Функций, принимающих символ или строку не так много, не обращай на них внимания.
Символы при чтении программы преобразуются в ссылки, эквивалентные указателям и потом (при выполнении программы) сравниваются не строки, а эти указатели, что гораздо эффективнее.

Fallen_s4e

Members


Статус

106 сообщений
http://lisper.ru
Где: Zimbabwe lisper.ru
Род занятий: fallen_s4e
Возраст: 133

#1634   2010-03-20 18:02 GMT+3 часа(ов)      
Спасибо.
Конечно сравниваются через eq(l).=)
> 1 <


Онлайн :

0 пользователь(ей), 20 гость(ей) :