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

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

Как зациклить ввод данных

Ответ
Поиск в этой теме
Непрочитано 27.01.2011, 09:21
Как зациклить ввод данных
solo123
 
Регистрация: 19.08.2009
Сообщений: 91

Как зациклить ввод данных так, чтобы каждый следующий ввод имел другую переменную например n2 вместо n1,n3 вместо n2, и тд.
количество циклов бесконечно до ввода(< 5>) [стоп]
( DEFUN c:zik ( / n1 )
(vl-load-com)
(setq n1 (getint " Введите направление (<1>) [прямо/право/лево/назад/стоп]: ")))
Просмотров: 9616
 
Непрочитано 28.01.2011, 10:19
#21
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от gomer Посмотреть сообщение
в квадратных скобках должно быть 5
ну... это как правило хорошего тона, "выход" - по пустому вводу.
А на практике, может ему надо 50 раз "прямо" пару раз "право\лево" и только потом "стоп". От сюда вопрос, что удобнее 50 раз нажать Enter\Space\ПКМ, и только в конце ввести "5", или 50 раз вводить "1", и только раз в конце нажать Enter\Space\ПКМ

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Вообще-то для выбора направления (1-прямо/2-право/3-лево/4-назад) не надо задавать столько ключевых слов и делать getkword.
Increase Size Decrease Size ?????°?? ?? ?????????µ?†?‹
http://www.youtube.com/watch?v=S22RkIpx8_s
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 28.01.2011, 18:46
#22
gomer

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


Врубился и я в рекурсию... Но как по мне здесь можно и без нее обойтись...
Обновил #5 Я тоже умею непонятно писать
Хотя уже не рулю...
gomer вне форума  
 
Непрочитано 28.01.2011, 20:26
#23
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от gomer Посмотреть сообщение
Врубился и я в рекурсию... Обновил #5
Нее... это не рекурсия
Цитата:
Сообщение от gomer Посмотреть сообщение
Я тоже умею непонятно писать
А с непонятно получилось
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 28.01.2011, 20:35
#24
gomer

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


Цитата:
Сообщение от Disney Посмотреть сообщение
Нее... это не рекурсия
Конечно нет... ИМХО если можно не использовать рекурсию, лучше так и сделать...
gomer вне форума  
 
Непрочитано 28.01.2011, 21:04
#25
Дима_

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


Цитата:
Сообщение от gomer Посмотреть сообщение
Обновил #5 Я тоже умею непонятно писать
Критику принимаешь? (не по поводу непонятности)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 28.01.2011, 21:55
#26
gomer

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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Критику принимаешь?
Ну конечно... вообще это автору интереснее было бы почитать... Давай критику =)
gomer вне форума  
 
Непрочитано 28.01.2011, 22:41
#27
Дима_

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


Цитата:
Сообщение от gomer Посмотреть сообщение
Давай критику =)
ты в цикле на каждой итерации вызываеш (split " "), (split "/") и (reverse (cdr (reverse optns))) - результат у них всегда одинаковый - достаточно одного вычисления этих функций.
(append DirectionList (list 1 значение)) - с точки зрения лиспа - конструкция вывернута на изнанку - списки это не массив - и принцип работы с ними иной - по сути ты приconsиваеш ко второму списку (из одного элемента), поочередно все элементы предыдущего списка (опять же на каждой итерации) - короче правильно использовать cons с revers'ом по окончани всех итераций.
Цитата:
Забываем про эру ДОС: "1-..." - это моветон!
- знакомые слова - а ведь "моветон" этот родился не с проста, выбери у себя опцию "Стоп" (мышкой) - Слоник однако получается (наверное проверял без него - добавил и не посмотрел - а еслиб "моветонил" - такого бы не было).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 28.01.2011, 23:15
#28
gomer

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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
ты в цикле на каждой итерации вызываеш (split " "), (split "/") и (reverse (cdr (reverse optns))) - результат у них всегда одинаковый - достаточно одного вычисления этих функций.
Дима_, вы опять намекаете на лямбду... я просто не вижу смысла в лишних переменных по причине указанной ниже...
Цитата:
Сообщение от Дима_ Посмотреть сообщение
(append DirectionList (list 1 значение)) - с точки зрения лиспа - конструкция вывернута на изнанку - списки это не массив - и принцип работы с ними иной - по сути ты приconsиваеш ко второму списку (из одного элемента), поочередно все элементы предыдущего списка (опять же на каждой итерации) - короче правильно использовать cons с revers'ом по окончани всех итераций.
Настращали, конечно я с вами абсолютно согласен... и в первом варианте был cons, с другой стороны все это компенсируется человеческим фактором (медлительностью пользователя...)
Конечно, рекурсивный принцип здесь весьма хорош, хоть я и не знаю, где хранятся промежуточные результаты вычисления рекурсивной функции и какую глубину рекурсии позволит мне лисп, тут опять же играет роль ч.ф. (см. выше)
Со слоном согласен... исправил одну букву! для этого и мастерил "бубен"...
gomer вне форума  
 
Непрочитано 29.01.2011, 00:10
#29
Дима_

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


Цитата:
Сообщение от gomer Посмотреть сообщение
хоть я и не знаю, где хранятся промежуточные результаты вычисления рекурсивной
А кто писал - "Врубился и я в рекурсию".
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 29.01.2011, 03:29
#30
gomer

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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
А кто писал - "Врубился и я в рекурсию".
Я имел ввиду конкретный пример... как формируется список
Мне непонятно где висит выделенное красным, пока выполняется выделенное зеленым...
Код:
[Выделить все]
(defun rec-f (key)
  (if (not (= key "5"))
    (cons (atoi key) (rec-f (get_key)))
  )
)
gomer вне форума  
 
Непрочитано 29.01.2011, 05:36
#31
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от gomer Посмотреть сообщение
Мне непонятно где висит выделенное красным, пока выполняется выделенное зеленым..
Код:
[Выделить все]
(defun rec-f (key)
  (if (not (= key "5"))
    (cons (atoi key) (rec-f (get_key)))
  )
)
Код:
[Выделить все]
(if (not (= (setq key (get_key)) "5"))
  (cons	(atoi key)
	(if (not (= (setq key (get_key)) "5"))
	  (cons	(atoi key)
		(if (not (= (setq key (get_key)) "5"))
		  (cons	(atoi key)
			(if (not (= (setq key (get_key)) "5"))
			  (cons	(atoi key)
				(if (not (= (setq key (get_key)) "5"))
				  (cons (atoi key) . . .)
				)
			  )
			)
		  )
		)
	  )
	)
  )
)
и If будет бесконечно(у рекурсии есть конечно свое ограничение) вкладываться, пока key ≠ "5"
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 29.01.2011, 10:38
#32
Дима_

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


То Дисней -добавив setq вы координально изменили логику (хоть результат и остался тем-же) - Если добавить обработку в нижнию часть кода (там где закрываются скобки) - в Вашем варианте key всегда будет равен последнему значению (поэтому я и не использую setq).
То Гомер - попробуй почитать определение каррирования - в автолиспе правда его создать невозможно, но встроенные функции с ним есть (+ list и пр).
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 29.01.2011 в 11:26.
Дима_ вне форума  
 
Непрочитано 29.01.2011, 12:29
#33
gomer

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


Цитата:
Сообщение от Disney Посмотреть сообщение
и If будет бесконечно(у рекурсии есть конечно свое ограничение) вкладываться, пока
Да это-то понятно... но пока вычисляется хвост, лисп же должен хранить операцию присоединения... а в коде это не видно...
вот пример - test не вычисляется пока key ≠ "5"
Код:
[Выделить все]
 ((lambda (f-rec get-key)
  (setq test (f-rec (get-key)))
  )
 (lambda (x)
  (if (not(= x "5")) (cons x (f-rec (get-key)))))
(lambda ()
  (initget 1 "1-прямо 2-право 3-лево 4-назад 5-стоп _1 2 3 4 5")
  (getkword "Введите направление [1-прямо/2-право/3-лево/4-назад/5-стоп] <1>:"))
)
gomer вне форума  
 
Непрочитано 29.01.2011, 12:40
#34
Дима_

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


Цитата:
Сообщение от gomer Посмотреть сообщение
test не вычисляется пока key ≠ "5"
кончно не вычислится - у любой функции вначале вычисляются аргументы (не путать функции со специальными формами (их кто как называет) - это if, cond, and, or...) - где хранится результат - прочти про каррирование
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 29.01.2011, 22:16
#35
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
добавив setq ты координально изменили логику
Да нее, это я просто хотел типа разложить рекурсию, для gomer.
Попробую ещё раз, пользователь вводил: "2" "2" "3" "4" "3" "5"
Код:
[Выделить все]
(cons 2
      (cons 2
	    (cons 3
		  (cons	4
			(cons 3
			      nil
			)
		  )
	    )
      )
)
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 30.01.2011, 15:18
#36
gomer

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


Да это то понятно... я говорю о контроле операций... например возможность задавать порядковый номер действия... откатывать действия...

ну хотя бы так

Код:
[Выделить все]
 (setq
	DirectionList '()
	OptionsList (list "Отмена" "ПРямо" "ВПраво" "ВЛево" "Назад" "Стоп")
	step (lambda () (1+ (length DirectionList)))
	optns (lambda () (if (= 1 (step)) (cdr OptionsList) OptionsList))
	def   (last (optns))
	split (lambda (lst dlm) (strcat (car lst) (strcat (apply 'strcat (mapcar '(lambda (x) (strcat dlm x)) (cdr lst)))))))
(while (/= def (progn (initget (split (optns) " "))
						 (setq CurrentDirection (cond ((getkword (strcat "\nУкажите направление [" (split (optns) "/") "] <" def ">: " )))
													  (def)))))
  (setq
	DirectionList
	(if (= 1 (step))
	  (append DirectionList (list (vl-position CurrentDirection (optns))))
	  (if (= CurrentDirection (car (optns)))
		(reverse (cdr (reverse DirectionList)))
		(append DirectionList (list (vl-position CurrentDirection (cdr (optns)))))
	  )
	)
  )
)
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как зациклить ввод данных



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Табличный ввод данных в ЛИРЕ. dagget Лира / Лира-САПР 20 24.12.2019 13:49
Ввод данных по умолчанию swkx Программирование 20 23.09.2010 14:58
VBA. Многократный ввод данных и изменение положения объектов Markiza-2010 Программирование 6 28.06.2010 02:30
Ввод данных в АВТОЛИСПе vovkam LISP 3 19.06.2009 19:41
LISP - ввод данных Torino LISP 4 02.08.2004 12:33