Непонятное поведение цикла по списку
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Непонятное поведение цикла по списку

Непонятное поведение цикла по списку

Ответ
Поиск в этой теме
Непрочитано 25.03.2012, 09:42 #1
Непонятное поведение цикла по списку
swkx
 
Регистрация: 22.01.2010
Сообщений: 311

День добрый.

Имеем список из 4-х элементов: ((1 T) (2 T) (3 T) (4 T))
В первом же шаге цикла меняю T на nil для элементов списка с 1-м значением >=3, т.е. получаем
((1 T) (2 T) (3 nil) (4 nil))
В цикле должны обрабатываться только те элементы, у которых 2-е значение = T,
поэтому я рассчитывал увидеть на экране:
elem: (1 T)
elem: (2 T)
но вместо этого увидел
elem: (1 T)
elem: (2 T)
elem: (3 T)
elem: (4 T)

Почему условие (if (cadr elem) ...) так нагло игнорируется ?
Такое впечатление, что в памяти образуется два экземпляра списка lst.
Проясните, плиз, такое поведение.

Код:
[Выделить все]
 (defun test ()
(setq lst (list '(1 T) '(2 T) '(3 T) '(4 T)))
(foreach elem lst
	(if (cadr elem)
	(progn
		(princ "\n elem: ") (princ elem)

		(setq lst2 (vl-remove-if
						(function (lambda (e)
								  	(< (car e) 3)
							  )
							)
						lst
						))
			
		(if lst2
			(foreach elem2 lst2
				(if (cadr elem2)
					(setq oldelem (car (vl-member-if (function (lambda (e) (equal e elem2))) lst))
						  newelem (subst nil T oldelem)
						  lst (subst newelem oldelem lst))
				)
			)
		)
			
	)
	)
)
(princ)
)
Просмотров: 7521
 
Непрочитано 25.03.2012, 12:26
#2
5hev

roads
 
Регистрация: 22.12.2010
msk
Сообщений: 121
<phrase 1= Отправить сообщение для 5hev с помощью Skype™


В строке 06 выводятся элементы списка lst, а не lst2.

Код:
[Выделить все]
 (defun test  ()
  (setq lst '((1 T) (2 T) (3 T) (4 T)))
  (mapcar '(lambda (x)
	     (if (and (> (car x) 2) (cadr x))
	       (setq lst (subst (list (car x) nil) x lst))))
	  lst)
  (foreach x lst (princ "\nElem: ")(princ x))
  (princ))
5hev вне форума  
 
Непрочитано 25.03.2012, 12:49
#3
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Код:
[Выделить все]
 (mapcar	'(lambda (x)
	   (if (< 2 (car x))
	     (list (car x) (not (cadr x)))
	     (progn (princ "\n elem: ") (princ x))
	   )
	 )
	(list '(1 T) '(2 T) '(3 T) '(4 T))
)
gomer вне форума  
 
Автор темы   Непрочитано 25.03.2012, 19:20
#4
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Вы меня не поняли, уважаемые.
Перед началом цикла список выглядит так: ((1 T) (2 T) (3 T) (4 T))
Уже после 1-го шага он выглядит так: ((1 T) (2 T) (3 nil) (4 nil))

Почему же на 3-м и 4-м шаге значение elem составляет (3 T) и (4 T) соответственно, как будто цикл ничего не знает о внесенных в список изменениях ?
swkx вне форума  
 
Непрочитано 25.03.2012, 19:35
#5
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от swkx Посмотреть сообщение
Перед началом цикла список выглядит так: ((1 T) (2 T) (3 T) (4 T))
Уже после 1-го шага он выглядит так: ((1 T) (2 T) (3 nil) (4 nil))
Список не изменяемая структура - он не может на одном шаге выглядеть так, а на другом этак - если списки отличаються значит они РАЗНЫЕ (просто в Вашем случае Вы разным спискам присваиваете одинаковые имена) - то как Вы пытаетесь сделать "не кашерно" с точки зрения лиспа - Вам два примера уже дали вчетверо короче чем Ваш - а Вы все пытаетесь "блох" выловить.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 25.03.2012, 19:57
#6
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Цитата:
Сообщение от Дима_ Посмотреть сообщение
просто в Вашем случае Вы разным спискам присваиваете одинаковые имена
Никогда бы не подумал, что такое возможно
swkx вне форума  
 
Непрочитано 25.03.2012, 19:58
#7
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от swkx Посмотреть сообщение
Вы меня не поняли, уважаемые.
мы вас поняли... смиритесь с таким положением дел, вот маленький пример:

Код:
[Выделить все]
 (defun test (lst)
  (foreach elem lst
    (princ lst) (princ "  ") (print elem)
    (setq lst (cons -1 lst))
  )
)
(test '(0 2 4 8 6))

Последний раз редактировалось gomer, 25.03.2012 в 20:10.
gomer вне форума  
 
Автор темы   Непрочитано 25.03.2012, 20:14
#8
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Что значит "смиритесь" ?))
Мне вполне достаточно знать, что это штатное поведение и оно таким и останется во всех подобных случаях, а не какой-нибудь глюк.
Не забыть бы только)...
swkx вне форума  
 
Непрочитано 25.03.2012, 21:00
#9
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от swkx Посмотреть сообщение
Мне вполне достаточно знать, что это штатное поведение и оно таким и останется во всех подобных случаях, а не какой-нибудь глюк.
Вам бы неплохо понять почему оно такое. В вашем примере выдает ровно то, что Вы просите, посмотрите внимательней.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 25.03.2012, 21:14
#10
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Вам бы неплохо понять почему оно такое
Пока я только понял, что все изменения, вносимые в список во время цикла по этому списку, нельзя использовать для анализа в самом этом цикле.
Наверное, этого достаточно. В конце концов всегда есть несколько способов решения задачи.
swkx вне форума  
 
Непрочитано 25.03.2012, 21:24
#11
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от swkx Посмотреть сообщение
Пока я только понял, что все изменения, вносимые в список....
Список НИКАК НЕВОЗМОЖНО изменить, все далее следствие непонимания этого.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 25.03.2012, 21:35
#12
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Список НИКАК НЕВОЗМОЖНО изменить
Так я этого и не знал. И что могут параллельно мирно сосуществовать два разных списка с одинаковыми именами - тоже не знал.
swkx вне форума  
 
Непрочитано 25.03.2012, 22:09
#13
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от swkx Посмотреть сообщение
И что могут параллельно мирно сосуществовать два разных списка с одинаковыми именами
Тут вернее сказать могут, но не желательны - чтоб не путаться кто где.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 25.03.2012, 22:12
#14
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Список НИКАК НЕВОЗМОЖНО изменить, все далее следствие непонимания этого.
Тогда переведи для сирых - что делает subst?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.03.2012, 23:41
#15
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Offtop: Алексей это Вы спрашиваете???
(subst x y z) Возращает НОВЫЙ список на основе z с измененными элеметами равными y на x,
логический аналог можно представить так (не оптимальный вариант, но "проще" всех показывает логику):
Код:
[Выделить все]
 (defun recsubst(x y z)
  (if z
      (cons (if (equal (car z) y) x (car z))
            (recsubst x y (cdr z)))))
з.ы. Хотя так наверное и наглядней:
Код:
[Выделить все]
 (defun mysubst(x y z)
  (mapcar '(lambda (a) (if (equal a y) x a)) z))
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 26.03.2012 в 00:33.
Дима_ вне форума  
 
Непрочитано 26.03.2012, 01:38
#16
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Тогда переведи для сирых - что делает subst?
изменяет переменную lst в выражениях ( 3 аргумент функции foreach) второй аргумент она не может изменить по определению (не та область видимости). Поэтому, Дима_, в принципе, правильно написал, что это разные списки
gomer вне форума  
 
Автор темы   Непрочитано 26.03.2012, 07:07
#17
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Как у вас тут всё лихо закручено


Код:
[Выделить все]
 (setq lst '()
	  lst (cons (list 1 2 3) lst)
	  lst (cons (list 4 5 6) lst))
По вашему выходит, что это три разных списка. Какой в этом смысл, если, обращаясь к нему как к lst, всегда получите последний вариант ?
Т.е. по сути имеете дело всегда с одним списком.
swkx вне форума  
 
Непрочитано 26.03.2012, 08:36
#18
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от swkx Посмотреть сообщение
По вашему выходит, что это три разных списка.
По "нашему" в этом коде вы трижды переопределяете переменную lst. Offtop: и сейчас полетят тухлые помидоры А по моему SETQ в автолиспе это "злейшие зло" благодаря которому все как-бы "упрощают" задачу, но тем самым закрывая самому себе дорогу понимания к ОСНОВАМ лиспа.
з.ы. Без присваивания (setq) конечно не возможны глобальные переменные и есть еще пара "узких" мест (по сути тоже возможны, но тут дело выходит за рамки "модели" автолиспа), но "втыкать" ее везде и всюду - ИХМО признак плохого тона и как минимум нечитаемости, "уязвимости" (когда без отладчика хрен поймешь что тут где) кода.
з.з.ы. To Gomer по моему ВАЖНО понимать разницу между изменением переменной lst и переопределением (ведь она по сути тоже неизменна).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 26.03.2012, 08:43
#19
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Цитата:
Сообщение от Дима_ Посмотреть сообщение
ВАЖНО понимать разницу между изменением переменной lst и переопределением
И какая же между ними разница ???
swkx вне форума  
 
Непрочитано 26.03.2012, 08:54
#20
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Если Вы, например, двух своих сыновей (дочерей) двойняшек одинаковыми именами назовете - измениться ли у Вас количество детей?? Но с обращением к ним у Вас возникнут некоторые проблемы. Если делать аналогию с классическим (императивным) представлением в программировании, то lst это ссылка на список, а не изменяем он для того, чтоб не было разницы между ссылкой и содержимым (сколько-бы "копий" этого списка мы не создали - физически это одни и те-же данные). Переоперделить данные мы можем локально ((lambda (lst) (здесь уже другой lst)) '(1 2 3)), это же не значит что мы локально "изменили" список.
В автолиспе ИЗМЕНИТЬ мы можем, например, свойства объекта (entmod или vla-put), сама объектная (и DXF) модель разработанна под императивное программирование (имеет изменяемые состояния) - из за чего при обращении (изменении) к последней необходимо вводить vla-startundomark и учитывать в каком "состоянии" она находиться (но есть конечно и плюсы от этого подхода).
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 26.03.2012 в 09:00.
Дима_ вне форума  
 
Автор темы   Непрочитано 26.03.2012, 08:59
#21
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Во вложении. По поводу изменяемости списка.
В обоих случаях нет упоминания о том, что возвращаемое значение - новый список.
Миниатюры
Нажмите на изображение для увеличения
Название: Определение subst.jpg
Просмотров: 54
Размер:	12.2 Кб
ID:	77113  Нажмите на изображение для увеличения
Название: Определение cons.jpg
Просмотров: 59
Размер:	11.0 Кб
ID:	77114  

Последний раз редактировалось swkx, 26.03.2012 в 09:09.
swkx вне форума  
 
Непрочитано 26.03.2012, 11:30
#22
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Да таких книжек (по автолиспу) абсолютное большинство - не раскрывают (или делают это очень бегло, не заостряя внимания) саму суть, что есть список, пара, lambda (которая почему-то, обычно, рассматриваеться как приложение к mapcar) и пр. функциональные понятия, а уж тем более их слабые и сильные стороны - типо мы сразу "практичной части" учим. А потом и пушут "примеры" с изменением списков - после чего вопросы подобные Вашему заглавию и рождаются.
з.ы. "не читайте советских газет"
з.з.ы В 1.9.20 написано, с натяжкой, верно - возращаемое значение..., во втором примере бред полный - попробуйте добавить в созданный список чего-либо с помощью cons.
з.з.з.ы кстати откуда это?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 26.03.2012, 11:40
#23
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
В обоих случаях нет упоминания о том, что возвращаемое значение - новый список.
Тем не менее это именно новый список. Упоминать об этом нет нужды. Это же LISP! В нем только функции, которые всегда что-то возвращают.
Даже if, cond и тому подобное - тоже функции. В LISP нет ничего наподобие Inc (i).

Для понимания сути очень полезно изучить книгу "Мир Лиспа" финских авторов. Там очень наглядно показано, как хранятся данные в Лисп.
ShaggyDoc вне форума  
 
Непрочитано 26.03.2012, 11:47
#24
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Даже if, cond и тому подобное - тоже функции.
Вот здесь небольшая натяжка - они конечно функции, но в лисп терминологии - это так называемые "особые формы" (не помню кто, на мой взгляд плохо, их перевел как операторы) - так как их поведение отличается от обычных функций, и для создания подобных вещей (с непоследовательной и возможно неполной обработкой аргументов) в "расширенных" лиспах созданы отдельные конструкции - макросы. У любой "настоящей" функции в лиспе (как и в математике) в начале вычисляются все ее аргументы.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 26.03.2012, 14:09
#25
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
они конечно функции, но в лисп терминологии - это так называемые "особые формы" (не помню кто, на мой взгляд плохо, их перевел как операторы) - так как их поведение отличается от обычных функций
Цитата:
— Но ведь это же равиолли.
— Ну они же пельмени!
— Да, но ведь они все-таки равиолли!
— Михалыч — сначала они — пель-ме-ни. А потом уже все остальное. Михалыч, ну это пельмени!..
— М-да, равиолли…
Да, особое и хитрое поведение. Которое можно с умом использовать. И перевел как "операторы" какой-то "сионист" или бейсикист.
Но все-таки это функции, они возвращают результат, который можно использовать. А во "всяких разных" языках
нельзя получить результат if...then...else.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 26.03.2012, 14:36
#26
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Цитата:
Сообщение от Дима_ Посмотреть сообщение
з.з.з.ы кстати откуда это?
На картинке 1-я страница этой книжки
Миниатюры
Нажмите на изображение для увеличения
Название: Book.jpg
Просмотров: 49
Размер:	162.5 Кб
ID:	77136  
swkx вне форума  
 
Непрочитано 26.03.2012, 14:44
#27
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


В общем-то действительно Уважаемые люди (я правда книжек из этой серии так ни одной и не прочел - может из-за этого и "такой" ). Тем паче, что "про лямбды" разъяснил мне лично (на одной из пъянок встреч формучан) Alaspher (он-же Лоскутов П.В.).
p/s/ хотя, судя по содержанию, про что я говорил в #22 здесь тоже пропущенно напрочь - но уточню - не читал - вижу только содержание.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 26.03.2012 в 15:11.
Дима_ вне форума  
 
Непрочитано 26.03.2012, 14:56
#28
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Дима_ Посмотреть сообщение
ВАЖНО понимать разницу между изменением переменной lst и переопределением
имхо, дело не в этом фунция foreach копирует значение lst в другую "ячейку", и руководствуется ей, а не ячейкой, на которую ссылается lst. mapcar работает так же, например:
Код:
[Выделить все]
 (defun test ( / lst)
(setq lst '(1 2 3))
(mapcar '(lambda (x) (setq lst (cons (1+ x) lst))) lst)
lst)
(test)
gomer вне форума  
 
Непрочитано 26.03.2012, 15:06
#29
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Какие еще ячейки??? Забудьте это слово в отношении лисп - тут их просто нет. Mapcar получил АРГУМЕНТ и ему глубоко плевать как он назывался lst, spisok или еще как - внутри его функции (лямбды в данном случае) его (аргумент) никаким образом не изменить, можете хоть "обприсваиваться".
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 28.03.2012, 09:13
#30
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Да таких книжек (по автолиспу) абсолютное большинство - не раскрывают (или делают это очень бегло, не заостряя внимания) саму суть, что есть список, пара, lambda (которая почему-то, обычно, рассматриваеться как приложение к mapcar) и пр. функциональные понятия, а уж тем более их слабые и сильные стороны - типо мы сразу "практичной части" учим. А потом и пушут "примеры" с изменением списков - после чего вопросы подобные Вашему заглавию и рождаются.
Эта книга, по сути, справочник функций, не более. Вопросам логики LISP и тем более областям видимости там вообще не уделяется никакого внимания. И так объём книги превысил первоначально намеченный. Вероятно, формулировки можно было сделать более точными, это справедливое замечание. В книге формулировки даны с точки зрения самих обрабатываемых данных, а не их размещения. Учится программировать по этой книге нельзя - она для того, что бы вспомнить, что делает та или иная функция.
Цитата:
Сообщение от Дима_ Посмотреть сообщение
з.ы. "не читайте советских газет"
Несоветские, зачастую нисколько не лучше, в процессе написания книги пришлось поковыряться в документации и самом АКАДе глубже обычного, там неточностей и недоговорённостей тож хватает.

Последний раз редактировалось Alaspher, 28.03.2012 в 15:04.
Alaspher вне форума  
 
Автор темы   Непрочитано 28.03.2012, 09:32
#31
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Цитата:
Сообщение от Alaspher Посмотреть сообщение
она для того, что бы вспомнить, что делает та или иная функция
Именно для этих целей и используется. И лучшего справочника я не встречал. Во всяком случае, у меня в компьютере уйма литературы по автолиспу, но кроме этой книжки уже давно ничего не открывается.
swkx вне форума  
 
Непрочитано 28.03.2012, 10:41
#32
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Alaspher Посмотреть сообщение
Несоветские, зачастую нисколько не лучше...
К сожалению это правда. Давайте может, хоть при помощи отдельной темы этого форума, напишем "брошюрку" про основы, в контексте именно автолиспа. Я б ей богу взялся, что знаю расскажу, но во первых сам знаю далеко не все, во вторых, в разумные сроки не потяну, да и надо, чтоб кто-то "знающий" проверил. Уверен у кого-то уже готовые статьи есть (про рекурсию я точно видел, кажется у Елпанова Евгения) - надо все в логической последовательности в "кучу" собрать. Сделаеам такое "сообщество авторов" dwg.ru, ну а если доделаем в отдельную pdf'ку оформим (заработать на всех вряд-ли получиться - так что думаю здесь вариант - только из любви к исскуству).
p.s. Если еще 1-2 человека найдеться, то я берусь (пока надо логику содержания продумать - с чего начинать).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 28.03.2012, 15:11
#33
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


swkx, спасибо, мы старались )

Дима_, "брошюрка" потянет страниц так на тыщщу в бумажном эквиваленте, это в лучшем случае. В рамках форума/вики можно осилить интересные локальные темы, типа области видимости или рекурсии, ничего большего, без наличия одного автора, который и будет тащить почти всё на себе, кмк не получится.
Alaspher вне форума  
 
Непрочитано 28.03.2012, 15:39
#34
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Какие еще ячейки??? Забудьте это слово в отношении лисп - тут их просто нет. Mapcar получил АРГУМЕНТ и ему глубоко плевать как он назывался lst, spisok или еще как - внутри его функции (лямбды в данном случае) его (аргумент) никаким образом не изменить, можете хоть "обприсваиваться".
дык, я именно про это и говорил
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Непонятное поведение цикла по списку



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятное поведение многострочного атрибута блока Нитонисе AutoCAD 2 11.09.2010 17:35
Непонятное поведение функции strlen, и вообще об unicode в txt-файлах batmax Программирование 4 01.09.2010 19:08
Непонятное поведение SCADа Engineer SV Расчетные программы 1 06.08.2010 23:37
Как ввести ключевое слово в командную строку при выполнении цикла lisp'ом? Дмитрий_Leo LISP 8 15.05.2010 09:44