Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу) - Страница 32
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Ответ
Поиск в этой теме
Непрочитано 20.07.2008, 20:12 1 |
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,990

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (Visual foxpro) программку типа суммирования столбцов списал у соседа (это уже в университете).
Не смотря на эте намерен научится писать программы для Автокада на лиспе, скачал книгу Хювенена, несколько примеров создания программ, но после получасового “смотрения” таких книг мое мышление явно притормаживает.
Решил пойти другим путем.
Нашел самый короткий лисп из моей коллекции, и прошу программистов с этого форума пошагово объяснить какой символ что означает. Надеюсь на вашу помощь.


Код:
[Выделить все]
(defun c:make-blocks-explodeable (/ adoc)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (vlax-for blk_def (vla-get-blocks adoc)
    (if (and (equal (vla-get-isxref blk_def) :vlax-false)
             (equal (vla-get-islayout blk_def) :vlax-false)
             ) ;_ end of and
      (vl-catch-all-apply '(lambda () (vla-put-explodable blk_def :vlax-true)))
      ) ;_ end of if
    ) ;_ end of vlax-for
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
_____________________________________________________________________________________________________________

Прошло много лет и топик теперь представляет из себя площадку для обучения азов программирования для многих начинающих.
Так что начинающие лиспогрызы приветствуются .
__________________
Блог

Последний раз редактировалось Red Nova, 12.07.2017 в 05:43.
Просмотров: 2047731
 
Непрочитано 06.03.2009, 22:09
#621
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


После nentsel'a проверяй тип возвращенного объекта. По-моему, в таком режиме это единственный вариант.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.03.2009, 23:20
#622
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


1. А что такое режим?
2. Вот еще вопрос.
Пишу код функции (функция-1) в которую вставляю другую функцию (функция-2), в функции-2 объявлена локальная переменная. Далее в функции-1 нужно вернуть значение локальной переменной функции-2, но в это время функция-2 свое уже отработала, и эта локальная переменная уже не существует. Очень не хочется трогать функцию-2 и менять локальную переменную на просто переменную, так как функция-2 применяется еще во многих местах. Выход есть?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 07.03.2009, 00:02
#623
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Если по-простому:
Код:
[Выделить все]
(defun get-text-string-by-ent (/ ent res)
  (if (= (type (setq ent (vl-catch-all-apply
                           (function
                             (lambda ()
                               (car (nentsel "\nУкажите атрибут, текст или многострочный текст <Отмена> : "))
                               ) ;_ end of lambda
                             ) ;_ end of function
                           ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'ename
         ) ;_ end of =
    (if (vlax-property-available-p (setq ent (vlax-ename->vla-object ent)) 'textstring)
      (setq res (vla-get-textstring ent))
      (alert (strcat "Указанный примитив не имеет свойства TextString"
                     "\nФункция завершает работу и вернет nil"
                     ) ;_ end of strcat
             ) ;_ end of alert
      ) ;_ end of if
    ) ;_ end of if
  res
  ) ;_ end of defun
Тип примитива специально не проверяется. Если у примитива есть свойство TextString, то результат будет. Иначе - nil.
Теперь по п.2 - ищи информацию по областям видимости переменных. В качестве иллюстрации:
Код:
[Выделить все]
(defun func_1 (/ local)
  (setq local "func_1")
  (princ (strcat "\nExecute func_1; local=" local))
  (func_2)
  (princ (strcat "\nExecute func_1; local=" local))
  (princ)
  ) ;_ end of defun

(defun func_2 (/ local)
  (setq local "func_2")
  (princ (strcat "\nExecute func_2; local=" local))
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.03.2009, 09:20
#624
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


По П.2
Посмотрел в инете информацию по областям видимости переменных, ничего нового для себя не узнал, все те же локальные и глобальные переменные. Как вытащить из функции значение локальной переменной не узнал. А может такое вообще невозможно?
Если на твоем примере, то мне нужно чтобы в функцие 1 значение переменной стало "func_2".
__________________
Блог

Последний раз редактировалось Red Nova, 07.03.2009 в 10:20.
Red Nova вне форума  
 
Непрочитано 07.03.2009, 10:34
#625
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Red Nova,
1. Присвой значение локальной переменной глобальной
Код:
[Выделить все]
(defun func_1 (/ local)
  (setq local "func_1")
  (princ (strcat "\nExecute func_1; local=" local))
  (func_2)
  (princ (strcat "\nExecute func_1; local=" local))
  (princ "\nExecute func_1; local from func2=")(princ  **GLOBAL_VAR**)
  (princ)
  ) ;_ end of defun

(defun func_2 (/ local)
  (setq local "func_2")
  (setq **GLOBAL_VAR** local)
  (princ (strcat "\nExecute func_2; local=" local))
  (princ)
  ) ;_ end of defun
2. или верни функцией-2 нужное значение
Код:
[Выделить все]
(defun func_1 (/ local l2)
  (setq local "func_1")
  (princ (strcat "\nExecute func_1; local=" local))
  (setq l2 (func_2)) ;;;Запоминаем значение переменной
  (princ (strcat "\nExecute func_1; local=" local))
  (princ "\nExecute func_1; local from func2=")(princ  l2)
  (princ)
  ) ;_ end of defun

(defun func_2 (/ local)
  (setq local "func_2")
  (princ (strcat "\nExecute func_2; local=" local))
  (princ)
  local ;;;Возвращаем значение переменной
  ) ;_ end of defun
PS
1. Глобальным может быть и список (если нужно вернуть несколько значенией)
2. Возвращаться может список (если нужно вернуть несколько значенией)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 07.03.2009, 11:00
#626
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Спасибо, значит таки придется чуток поменять твою SPECKG, поскольку мне нужно вернуть из нее список itog для таблицы ведомости расхода стали
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 08.03.2009, 13:37
#627
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Требуется создать цикл типа этого
Код:
[Выделить все]
      (setq flag_izdelie 0)
      (setq get_nil t)

      (while get_nil
      (setq izdelie (get-text-string-by-ent))
      (speckg "5D")
      (setq itog_Izdelie (list izdelie itog))
      (if (= 0 flag_izdelie)
	(setq itog_Izdelie_all (list itog_Izdelie))
	(setq itog_Izdelie_all (cons itog_Izdelie itog_Izdelie_all))
      );_end of  if	
      (setq flag_izdelie (+ 1 flag_izdelie))
      ?????
      );_end of while
Здесь используются функция от VVA speckg (найти ее можно тут), в которой правда itog стал глобальной переменной, и функция get-text-string-by-ent с поста 623.
Не могу определится со строкой с вопросами. Как выяснить нажал ли пользователь enter, и в зависимости от этого назначить “get_nil” nil ?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 08.03.2009, 14:38
#628
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Ф-ция get-text-string-by-ent в случае нажатия enter или выбора примитива, у которого нет свойства Textstring вернет nil
Код:
[Выделить все]
(setq flag_izdelie 0)
      (setq get_nil t)

      (while (setq izdelie (get-text-string-by-ent))
       (speckg "5D")
      (setq itog_Izdelie (list izdelie itog))
      (if (= 0 flag_izdelie)
	(setq itog_Izdelie_all (list itog_Izdelie))
	(setq itog_Izdelie_all (cons itog_Izdelie itog_Izdelie_all))
      );_end of  if	
      (setq flag_izdelie (+ 1 flag_izdelie))
      );_end of while
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 08.03.2009, 16:12
#629
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Спасибо. Теперь я подошел к самой сложной для меня части создания кода для ведомости расхода стали.
В результате описанных выше преобразований я могу получить к примеру такой список.
Код:
[Выделить все]
((Изд 1 (Арматура АI (ГОСТ 5781-82 (Арматура d= 6 4.44) (Арматура d= 8 7.9)))) 
 (Изд 2 (Арматура АI (ГОСТ 5781-82 (Арматура d= 8 7.9))) (Арматура АIII (ГОСТ 5781-82 (Арматура d= 8 7.9)))) 
 (Изд 3 (Прокат ВСТ3КП2 (ГОСТ 19903-74 (Лист 8 3.14) (Лист 10 39.25)))))
Если представить его в виде концепции списка, то получится
Код:
[Выделить все]
((“Изделие” (“Вид изделия” (“ГОСТ” (“Параметр изделия” “Вес”))) (….)(….))
Для дальнейших действий мне нужно привести списки для всех изделий к одному виду.
Изделие-1 содержит только один вид изделия - Арматура АI
Изделие-2 содержит два вида изделия - Арматура АI и Арматура АIII
Изделие-1 содержит один вид изделия - Прокат ВСТ3КП2
Во первых нужно для каждого изделия проверить какие типы изделий есть в остальных изделиях и не хватают в нем, и добавить недостающие списки в его список. Затем спустится ниже уровнем и проверить наличие в других списках ГОСТов и вставить недостающие. Затем сделать тоже для каждого параметра изделия, а “вес” для них будет “0”. Думаю объяснение весьма хаотичное. Для большей ясности приведу пример того во что список должен преобразоваться.
Код:
[Выделить все]
((Изд 1 (Арматура АI (ГОСТ 5781-82 (Арматура d= 6 4.44) (Арматура d= 8 7.9))) (Арматура АIII (ГОСТ 5781-82 (Арматура d= 8 0))) (Прокат ВСТ3КП2 (ГОСТ 19903-74 (Лист 8 0) (Лист 10 0)))) 
 (Изд 2 (Арматура АI (ГОСТ 5781-82 (Арматура d= 6 0) (Арматура d= 8 7.9))) (Арматура АIII (ГОСТ 5781-82 (Арматура d= 8 7.9))) (Прокат ВСТ3КП2 (ГОСТ 19903-74 (Лист 8 0) (Лист 10 0)))) 
 (Изд 3 (Арматура АI (ГОСТ 5781-82 (Арматура d= 6 0) (Арматура d= 8 0))) (Арматура АIII (ГОСТ 5781-82 (Арматура d= 8 0))) (Прокат ВСТ3КП2 (ГОСТ 19903-74 (Лист 8 3.14) (Лист 10 39.25)))))
Как реализовать это не имею представления.

Добавлено
Хотя нет. Представление о возможном пути решения похоже появилось, но на столько сложное, что может лучше бы эта идея ко мне не приходила.
Поскольку важно учесть и очередность профилей, то нужно будет создать эталонный список, в котором будут все профили (а для каждого профиля все возможные толщины, диаметры или номера). Учитывая то, сколько одних только болтов dextron забил в prokat.ves, то эталонный список будет весьма длинный.
Затем нужно создать пустой список СИП (список использованных профилей)
Потом берем первый профиль эталонного списка и ищем нет ли такого профиля в исходном списке, если есть то добавляем в СИП этот профиль, потом просматриваем каждый диаметр для этого профиля, и находя хоть один, добавляем его в СИП, в результате для приведенного выше списка СИП получится такой
Код:
[Выделить все]
((Арматура АI (ГОСТ 5781-82 (Арматура d= 6) (Арматура d= 8))) (Арматура АIII (ГОСТ 5781-82 (Арматура d= 8))) (Прокат ВСТ3КП2 (ГОСТ 19903-74 (Лист 8) (Лист 10)))
Далее нужно пройтись по исходному списку еще раз, и сравнивать его уже с СИП-ом, добавляя по ходу в него недостающие элементы.
Если других мыслей нету, то буду делать так.

Возник вопрос. Требуется в зависимости от некого counter-а вернуть N-ный элемент списка, причем N = counter, как это сделать?
__________________
Блог

Последний раз редактировалось Red Nova, 08.03.2009 в 21:24.
Red Nova вне форума  
 
Непрочитано 08.03.2009, 22:39
#630
Aminka

проектировщик CТБ
 
Регистрация: 03.03.2009
Сообщений: 28


Привет вам с кисточкой от чайника) Есть задачка - вставить в чертеж уже существующий блок и присвоить его аттрибутиву некоторое число. Видела на форуме примеры программок, выполняющих подобное, но с применением LISP - объектно-ориентированного. Каким образом можно выполнить эту задачку, работая с блоками, как со списками?
Aminka вне форума  
 
Непрочитано 09.03.2009, 01:04
#631
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Aminka, а если по-русски? Работая с блоками, как со списками, но без программирования??
Red Nova, я так подозреваю, что тебе последняя задача нужна для заполнения таблицы, верно?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.03.2009, 10:17
#632
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Red Nova,
Цитата:
Возник вопрос. Требуется в зависимости от некого counter-а вернуть N-ный элемент списка, причем N = counter, как это сделать?
Код:
[Выделить все]
(nth 2 '(0 1 2 3 4)) ;;Отсчет начинается с 0
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 09.03.2009, 14:55
#633
Aminka

проектировщик CТБ
 
Регистрация: 03.03.2009
Сообщений: 28


Кулик Алексей aka kpblcа если по-русски? Работая с блоками, как со списками, но без программирования??

без программирования я себе это с трудом представляю. Если я правильно понимаю, в автолиспе возможно работать тремя способами: 1. использованием функции command для создания и редактирования объектов 2.с помощью функций entmake и entmod, передавая в них списки со значениями dxf-кодов объектов. 3. с помощью AktivX. Меня интересует второй метод - каким образом вставить в чертеж блок, который уже присутствует в списке блоков данного чертежа, присвоив тестовому аттрибуту этого блока некоторое значение.
Aminka вне форума  
 
Непрочитано 09.03.2009, 16:18
#634
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


http://forum.dwg.ru/showthread.php?t=11905 ?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.03.2009, 00:13
#635
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


VVA,
Спасибо, то что надо.
Кулик Алексей aka kpblc, Нет, нужно мне было это для сравнения двух списков, в недаконченном варианте это похоже на
Код:
[Выделить все]
(defun ved_metal (/)
; Проверяем число изделий, и если оно больше чем 1, то преобразуем список
(setq etalon (list
'("Арматура АI" ("ГОСТ 5781-82" ("Арматура d= 3" "Арматура d= 4" "Арматура d= 5" "Арматура d= 6"
		   "Арматура d= 8" "Арматура d= 10" "Арматура d= 12" "Арматура d= 14" "Арматура d= 16"
		   "Арматура d= 18" "Арматура d= 20" "Арматура d= 25" "Арматура d= 28" "Арматура d= 32"
		   "Арматура d= 36" "Арматура d= 40" "Арматура d= 45" "Арматура d= 50" "Арматура d= 55"
		   "Арматура d= 60" "Арматура d= 70" "Арматура d= 80")))

'("Арматура АIII" ("ГОСТ 5781-82" (("Арматура d= 3") ("Арматура d= 4") ("Арматура d= 5") ("Арматура d= 6")
		   ("Арматура d= 8") ("Арматура d= 10") ("Арматура d= 12") ("Арматура d= 14") ("Арматура d= 16")
		   ("Арматура d= 18") ("Арматура d= 20") ("Арматура d= 25") ("Арматура d= 28") ("Арматура d= 32")
		   ("Арматура d= 36") ("Арматура d= 40") ("Арматура d= 45") ("Арматура d= 50") ("Арматура d= 55")
		   ("Арматура d= 60") ("Арматура d= 70") ("Арматура d= 80"))))
       ));_end of setq


  (setq count_etalon 0)
  (setq count_etalon_profil 0)
  (setq list_sip nil)
   (if (> (length itog_Izdelie_all) 1)
    (foreach itog_Izdelie itog_Izdelie_all
	(if
      		(wcmatch (car(car (cdr itog_Izdelie))) (car (nth count_etalon etalon)))
	  	(progn
		(setq count_profil 0)
		(while (nth count_etalon_profil (car (cdr (car (cdr (nth count_etalon etalon))))))
		(progn
		(if 
		  (wcmatch (car (nth count_profil (cdr (car (cdr (car (cdr itog_Izdelie))))))) (nth count_etalon_profil (car (cdr (car (cdr (nth count_etalon etalon)))))))
		  (progn
		  (if list_sip
		  (setq list_sip (cons (car list_sip) (nth count_etalon_profil (car (cdr (car (cdr (nth count_etalon etalon))))))))
		  (setq list_sip (list (nth count_etalon_profil (car (cdr (car (cdr (nth count_etalon etalon))))))))
		     );_end of if
		  (setq count_profil (+ 1 count_profil))
		    );_end of progn
		   );_end of if
		(setq count_etalon_profil (+ 1 count_etalon_profil))
		  );_end of progn
		 );_end of while
	       );_end of progn
		
	);_end of if
      );_end of foreach
    );_end of if
 )
При этом itog_Izdelie_all это что-то типа
Код:
[Выделить все]
((Изделие-1 (Арматура АI (ГОСТ 5781-82 (Арматура d= 5 3.08) (Арматура d= 6 4.44))))
 (Изделие-2 (Арматура АIII (ГОСТ 5781-82 (Арматура d= 8 7.9)))))
All Какая разница между списками с точкой между элементов и без?
("A" "B") и ("A" . "B")
__________________
Блог
Red Nova вне форума  
 
Непрочитано 12.03.2009, 01:10
#636
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Red Nova, если честно, то я давно уже потерял общую нить рассуждений и способен отвечать (в лучшем случае) только на последний вопрос. Если хочешь разобраться с кодом "сравнения двух списков", то можно приложить файл, откуда твой обрабатываемый список получен; код, которым ты его получаешь; и результат выполнения. Тогда можно было бы поковыряться (кстати, про версию када не забудь - это так, на всякий случай ).
Лично я, например, вижу не самую оптимальную организацию списка как etalon, так и itog_izdelie_all. А отсюда и все остальное пляшет бог знает как.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.03.2009, 08:58
#637
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Цитата:
и способен отвечать (в лучшем случае) только на последний вопрос
Но так и не ответил
Цитата:
Лично я, например, вижу не самую оптимальную организацию списка как etalon, так и itog_izdelie_all.
itog_izdelie_all трогать нельзя, так как он повязан с лиспом от VVA spec5d, а он по размерам напоминает "Войну и мир".
Цитата:
Если хочешь разобраться с кодом "сравнения двух списков", то можно приложить файл, откуда твой обрабатываемый список получен; код, которым ты его получаешь; и результат выполнения. Тогда можно было бы поковыряться .
Разработка дома, но в любом случае лучше исходить из того что уже имеем itog_izdelie_all, а дальше думать как лучше.
Цитата:
давно уже потерял общую нить рассуждений
Все есть в #629.
__________________
Блог

Последний раз редактировалось Red Nova, 12.03.2009 в 09:08.
Red Nova вне форума  
 
Непрочитано 12.03.2009, 09:08
#638
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


А чего, все архиваторы сразу сказали "ква"? Хором?
Кстати, в #629, думаешь, что-то более понятно, чем в #637? Лично мне - нет
P.S. Разницу между списком и точечной парой я понимать понимаю, но объяснить не могу
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.03.2009, 09:29
#639
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Цитата:
А чего, все архиваторы сразу сказали "ква"? Хором?
Ничего не понял.
Цитата:
Кстати, в #629, думаешь, что-то более понятно, чем в #637? Лично мне - нет
Мда, выдастся свободное время попытаюсь по лучше объяснить.
Цитата:
P.S. Разницу между списком и точечной парой я понимать понимаю, но объяснить не могу
Я имел в виду влеяет ли наличае точки на возможные дальнейшие операции со списком?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 12.03.2009, 09:32
#640
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Ну вот, как пример:
Код:
[Выделить все]
_$ (setq lst1 '("A" "B") lst2 '("A" . "B"))
("A" . "B")
_$ (car lst1)
"A"
_$ (car lst2)
"A"
_$ (cdr lst1)
("B")
_$ (cdr lst2)
"B"
_$ (cadr lst1)
"B"
_$ (cadr lst2)
_1$ 
; quit after error
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46