Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lisp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Lambdik
1044 / 938 / 107
Регистрация: 04.11.2012
Сообщений: 971
Записей в блоге: 3
1

Генератор присваиваний

09.11.2012, 22:33. Просмотров 666. Ответов 7
Метки нет (Все метки)

Дан список (spisok '((1 1 0) (2 2 0) (3 3 0) ... n))
Нужно его разобрать на переменные!
t1 t2 t3 ... tn

Загвоздка в том, что длина списка заранее не известна, до присваивания.
функция может выглядеть примерно так:
Lisp
1
2
3
4
(defun sp ()
  (setq spisok '((1 1 0) (2 2 0) (3 3 0) ... tn))
   ;как-то разбираем список
(setq t1 '(1 1 0)  t2 '(2 2 0)  t3 '(3 3 0) ... tn)
Lisp
1
>(sp)  ==>(последнее значение)
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2012, 22:33
Ответы с готовыми решениями:

Скорость сравнений и присваиваний
Доброго времени суток. Интересует вопрос: насколько примерно процесс сравнения двух элементов...

Нужно посчитать количество сравнений и присваиваний в сортировках
Задание отсортировать массив чисел по возрастанию и убыванию сортировками (вставками ,слиянием,...

Cортировка Шелла / Древовидная, определить количество перестановок и присваиваний
Заданы 3 массива из 200 эл. 1 упорядоченный.2масссив 200,199,198 и тд. 3 рандомный( как задать...

Подсчитать количество присваиваний и количество сравнений при сортировке
Составить программу, которая для массива, заполненного случайными целыми числами, проводит...

Генератор комплексных чисел. Генератор гауссовских целых чисел
rand(1,n) - генерирует случайные числа, нормально распределенные на . Есть ли аналогичный генератор...

7
Nameless One
Эксперт С++
5797 / 3447 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
10.11.2012, 06:21 2
Lisp
1
2
3
4
5
6
7
8
9
(defun bind-values-of (list &key (prefix "t"))
  (loop for item in list and num from 1
        do (setf (symbol-value
                  (intern
                   (concatenate 'string
                                (string-upcase prefix)
                                (princ-to-string num))))
                 item)
       finally (return item)))
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
> (bind-values-of '(1 2 3 4 5))
 
5
> t1
 
1
> t4
 
4
> (+ t2 t3)
 
5
> (/ t5)
 
1/5
>
Но зачем?
1
Lambdik
1044 / 938 / 107
Регистрация: 04.11.2012
Сообщений: 971
Записей в блоге: 3
10.11.2012, 12:09  [ТС] 3
Круто, спасибо!

Конечная цель такая:
(команда: "_.примитив" t1 t2 t3 t4 "")

Просто мне кажется что AutoLisper'ов здесь не любят. поэтому сразу не признавался
Единственное, что мне придется подправить этот код, но главное идея!
0
Nameless One
Эксперт С++
5797 / 3447 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
10.11.2012, 12:49 4
Цитата Сообщение от Lambdik Посмотреть сообщение
Конечная цель такая:
(команда: "_.примитив" t1 t2 t3 t4 "")
По-моему для таких целей лучше подойдет apply, если он, конечно же, в AutoLisp есть.
0
10.11.2012, 12:49
Lambdik
1044 / 938 / 107
Регистрация: 04.11.2012
Сообщений: 971
Записей в блоге: 3
10.11.2012, 13:08  [ТС] 5
Да есть. Я похимичу, и если все получится, то выложу.
0
Catstail
Модератор
24736 / 12540 / 2288
Регистрация: 12.02.2012
Сообщений: 20,389
10.11.2012, 17:31 6
А вот как это выглядит в HomeLisp-е:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
(defun make-vars-from-list (lst pref)
  (cond ((null lst) t)
        (t (progn (set (gensym pref) (car lst)) (make-vars-from-list (cdr lst) pref))))) 
 
==> make-vars-from-list
 
(make-vars-from-list '(a s d e) "q")
 
==> T
 
Создана глобальная переменная q5
Создана глобальная переменная q6
Создана глобальная переменная q7
Создана глобальная переменная q8
 
(make-vars-from-list '((a) (s) (d)) "q")
 
==> T
 
Создана глобальная переменная q9
Создана глобальная переменная q10
Создана глобальная переменная q11
 
q10
 
==> (s)
 
q7
1
Lambdik
1044 / 938 / 107
Регистрация: 04.11.2012
Сообщений: 971
Записей в блоге: 3
10.11.2012, 17:42  [ТС] 7
Да, все работает. А я еще сомневался, корректно ли поставил задачу!?
Хорошо что есть такие люди, знатоки своего дела с которых хочется брать пример!

PS. осталось только придумать чем заменить gensym.
0
Catstail
Модератор
24736 / 12540 / 2288
Регистрация: 12.02.2012
Сообщений: 20,389
10.11.2012, 17:55 8
Или можно макро сделать:

Lisp
1
2
3
4
5
(defmacro make-vars-from-list (lst pref)
 (let ((head (car lst))
       (tail (cdr lst)))
  (cond ((null lst) nil)
        (t `(cons (list (set (gensym ,pref) ,head)) (make-vars-from-list ,tail ,pref))))))
Добавлено через 5 минут
Цитата Сообщение от Lambdik Посмотреть сообщение
чем заменить gensym.
- на первый случай можно договориться (с самим собой) и взять в качестве префикса имени что-либо, больше нигде не использующееся

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(let ((c 0))
   (defun gensym! (pref) 
      (setq c (+ 1 c))
      (implode (append (explode pref) (explode c))))) 
 
==> gensym!
 
(gensym! 'qwe)
 
==> qwe1
 
(gensym! 'qwe)
 
==> qwe2
0
10.11.2012, 17:55
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2012, 17:55

Генератор на С++
Всем привет, вот нашел классную прогу, она делает все то что мне нужно за 2мя исключениями 1) Он...

Генератор
Здравствуйте, кодеры. Хочу написать программу. Но никак не могу придумать алгоритм. Суть программы...

Генератор
Создать программу , генератор 15ти значного кода . Эти числа " 3 5 8 10 14 " должны быть в коде...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru