Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для Sherattan
0 / 0 / 0
Регистрация: 29.03.2013
Сообщений: 23

Пожалуйста, подправьте программку! Списки списков (Allegro lisp)

03.05.2013, 23:38. Показов 1172. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача: сформировать такие цепочки из списка списков, в которых последний элемент предыдущего списка совпадает с первым следующего.
Пример: ((a 2) (n 6) (2 f) (a v) (6 b) (f p) (d a)) => ((a 2) (2 f) (f p)) и ((n 6) (6 b)) и т.п

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
; подсчет количества подсписков в исх. списке
(defun podschet (w)
   (setq i 1)
(cond   (if (= w null) i)
        (podschet (cdr w)))
   (setq i (+ i 1))
(return from podschet i))   
;------------------------------------------- 
          (setq mylst '((a 2) (n  6) (a v) (7  n) (d a)))
(loop for i from 1 to i do
  (setq cep '())                             
  (setq golova (car mylst))               
  (setq hvost (cdr mylst))
  (setq iskom_el (cdr golova))            ; искомый элемент - хвост первого подсписка
    (if (= iskom_el (car (car hvost)))    ; сравниваем искомый элемент с первым эл-том первого подсписка хвоста
      (cons cep (car hvost) )
      (setq mylst hvost)                     ; отсекаем голову заданного списка
     )
)
(podschet mylst)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.05.2013, 23:38
Ответы с готовыми решениями:

Подправьте программку
Привет всем))решал задачку,программа не запускается в чём ошибка подскажите пожалуйста! УСЛОВИЕ: Задан набор из N целых чисел....

Замена значений элементов с нечетными номерами на значение минимального положительного элемента (Allegro Lisp)
Помогите сделать 1 программку максимально просто для allegro lisp -замена значений элементов с нечетными номерами на значение...

Добавление элемента с максимальным значением после минимального элемента (Allegro Lisp)
Помогите сделать 1 программку максимально просто -добавление элемента с максимальным значением после минимального элемента; Заранее...

11
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38162 / 21097 / 4306
Регистрация: 12.02.2012
Сообщений: 34,685
Записей в блоге: 14
04.05.2013, 00:01
Честно говоря, это лучше не править, а переписать... Текст нехорош. Один "подсчет количества подсписков в исх. списке" чего стоит! Для этого достаточно вызвать стандартную функцию length. А в действительности определять длину не нужно. Вот, если угодно, решение "в два действия" (и без явных присвоений):

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
;; Построить из списка lst цепочку с "затравкой" curr
 
(defun mk-chain (lst curr &optional (chain (list curr)))
  (cond ((null lst) chain)
        ((eq (cadr curr) (caar lst)) (mk-chain (cdr lst) (car lst) (append chain (list (car lst)))))
        (t (mk-chain (cdr lst) curr chain))))
 
;; Решение задачи:
 
(defun task (lst)
  (let ((res nil))
    (dolist (i lst res)
      (let ((ch (mk-chain lst i)))
        (when (> (length ch) 1) (push ch res))))))   
 
==> task
 
(task '((a 2) (n 6) (2 f) (a v) (6 b) (f p) (d a)))
 
==> (((d a) (a 2) (2 f) (f p)) ((2 f) (f p)) ((n 6) (6 b)) ((a 2) (2 f) (f p)))
1
 Аватар для _sg
4706 / 4401 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
04.05.2013, 07:52
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(defun del (v w)
  (cond ((null w) nil)
        ((equal (car w) v) (del v (cdr w)))
        ((cons (car w) (del v (cdr w))))))
 
(defun chains (w z)
  (when w (cons (chain w z) (chains (cdr w) z))))
 
(defun chain (w z &optional (b (car w)) &aux (v (same b z)))
  (if v (cons b (chain (cdr w) (del b (del v z)) v)) `(,b)))
       
(defun same (v w)
  (cond ((null w) nil)
        ((eq (cadr v) (caar w)) (car w))
        ((same v (cdr w)))))
 
(defun all-chains (w)
  (delete-if-not #'cdr (chains w w)))
 
> (all-chains '((a 2) (n 6) (2 f) (a v) (6 b) (f p) (d a)))
(((A 2) (2 F) (F P)) ((N 6) (6 B)) ((2 F) (F P)) ((D A) (A 2) (2 F) (F P)))
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(defun del (v w)
  (cond ((null w) nil)
        ((equal (car w) v) (del v (cdr w)))
        ((cons (car w) (del v (cdr w))))))
 
(defun chains (w z &aux (c (chain w z)))
  (when w (if (cdr c)
              (cons c (chains (cdr w) z))
              (chains (cdr w) z))))
 
(defun chain (w z &optional (b (car w)) &aux (v (same b z)))
  (if v (cons b (chain (cdr w) (del b (del v z)) v)) `(,b)))
       
(defun same (v w)
  (cond ((null w) nil)
        ((eq (cadr v) (caar w)) (car w))
        ((same v (cdr w)))))
 
(defun all-chains (w)
  (chains w w))
 
> (all-chains '((a 2) (n 6) (2 f) (a v) (6 b) (f p) (d a)))
(((A 2) (2 F) (F P)) ((N 6) (6 B)) ((2 F) (F P)) ((D A) (A 2) (2 F) (F P)))
2
 Аватар для Sherattan
0 / 0 / 0
Регистрация: 29.03.2013
Сообщений: 23
06.05.2013, 11:01  [ТС]
Спасибо огромное вам!
А можно сделать так, чтобы подсписки, которые уже включены в какую-нибудь из цепочек, сразу после этого удалялись из основного списка?
Забыла об этом условии в прошлый раз
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38162 / 21097 / 4306
Регистрация: 12.02.2012
Сообщений: 34,685
Записей в блоге: 14
06.05.2013, 11:34
Цитата Сообщение от Sherattan Посмотреть сообщение
сразу после этого удалялись из основного списка
- тогда вывод будет короче. Так?
0
 Аватар для Sherattan
0 / 0 / 0
Регистрация: 29.03.2013
Сообщений: 23
06.05.2013, 12:23  [ТС]
Да, выходит, что так.
Как в моем примере:
((a 2) (n 6) (2 f) (a v) (6 b) (f p) (d a))
Сформировали цепочку ((a 2) (2 f) (f p)), оставили в осн. списке ((a 2) (n 6) (2 f) (a v) (6 b) (f p) (d a)) => ((n 6) (a v) (6 b) (d a))...
0
 Аватар для _sg
4706 / 4401 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
06.05.2013, 13:09
как вариант:
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 del (v w)
  (cond ((null w) nil)
        ((equal (car w) v) (del v (cdr w)))
        ((cons (car w) (del v (cdr w))))))
 
(defun chains (w z)
  (when w (cons (chain w z) (chains (cdr w) z))))
 
(defun clear (v w)
  (cond ((null v) nil)
        ((some #'(lambda (e) (subsetp (car v) e :test #'equalp))
               (remove (car v) w))
         (clear (cdr v) w))
        ((cons (car v) (clear (cdr v) w)))))
 
(defun chain (w z &optional (b (car w)) &aux (v (same b z)))
  (if v (cons b (chain (cdr w) (del b (del v z)) v)) `(,b)))
       
(defun same (v w)
  (cond ((null w) nil)
        ((eq (cadr v) (caar w)) (car w))
        ((same v (cdr w)))))
 
(defun all-chains (w &aux (z (chains w w)))
  (delete-if-not #'cdr (clear z z)))
 
> (all-chains '((a 2) (n 6) (2 f) (a v) (6 b) (f p) (d a)))
(((N 6) (6 B)) ((D A) (A 2) (2 F) (F P)))
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(defun chains (w z)
  (when w (cons (chain w z) (chains (cdr w) z))))
 
(defun clear (v w)
  (cond ((null v) nil)
        ((some #'(lambda (e) (subsetp (car v) e :test #'equal))
               (remove (car v) w))
         (clear (cdr v) w))
        ((cons (car v) (clear (cdr v) w)))))
 
(defun chain (w z &optional (b (car w)) &aux (v (same b z)))
  (if v (cons b (chain (cdr w) (remove b (remove v z)) v)) `(,b)))
       
(defun same (v w)
  (cond ((null w) nil)
        ((eq (cadr v) (caar w)) (car w))
        ((same v (cdr w)))))
 
(defun all-chains (w &aux (z (chains w w)))
  (delete-if-not #'cdr (clear z z)))
 
> (all-chains '((a 2) (n 6) (2 f) (a v) (6 b) (f p) (d a)))
(((N 6) (6 B)) ((D A) (A 2) (2 F) (F P)))
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38162 / 21097 / 4306
Регистрация: 12.02.2012
Сообщений: 34,685
Записей в блоге: 14
06.05.2013, 14:32
И мое решение можно поправить (правда, ценой одного setq):

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun task (lst)
  (let ((res nil))
   (loop
    (when (not
     (dolist (i lst nil)
       (when (let ((ch (mk-chain lst i)))
               (when (> (length ch) 1) 
                     (push ch res)
                     (dolist (j ch t)
                        (setq lst (removef j lst)))
                     t) nil) (return t)  ))) (return res)))))
 
(task '((a 2) (n 6) (2 f) (a v) (6 b) (f p) (d a)))
 
==> (((d a) (a v)) ((n 6) (6 b)) ((a 2) (2 f) (f p)))
1
 Аватар для _sg
4706 / 4401 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
06.05.2013, 14:46
Lisp
1
((D A) (A 2) (2 F) (F P))
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38162 / 21097 / 4306
Регистрация: 12.02.2012
Сообщений: 34,685
Записей в блоге: 14
06.05.2013, 17:01
Да, если нужно формировать цепочку максимальной длины. Но условие задачи нечетко...
0
 Аватар для Sherattan
0 / 0 / 0
Регистрация: 29.03.2013
Сообщений: 23
06.05.2013, 21:17  [ТС]
Пытаюсь разбираться, но с нижеприведенными строчками - беда... Очень плохо знаю лисп, без вашей помощи - никак...

Цитата Сообщение от _sg Посмотреть сообщение
(some #'(lambda (e) (subsetp (car v) e :test #'equal))
Цитата Сообщение от _sg Посмотреть сообщение
(delete-if-not #'cdr (clear z z)))
0
 Аватар для _sg
4706 / 4401 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
06.05.2013, 21:24
http://www.lispworks.com/docum... subset.htm
http://www.lispworks.com/docum... _rm_rm.htm

Добавлено через 52 секунды
http://www.lispworks.com/docum... everyc.htm
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.05.2013, 21:24
Помогаю со студенческими работами здесь

подправьте цикл пожалуйста
{$f+} program Oo; const n=11; h=0.1; x=1; var sum,funk,sinu,r:real;k:real; i:integer; type...

Подправьте код пожалуйста
#include <stdio.h> int main(void) { int k; float p,s,norm; printf("vvedite p: "); scanf("%f",p); norm,s=10; ...

подправьте код пожалуйста
Здравствуйте уважаемые программисты. Я недавно писал маленькую текстовую игрушку на яве (это наша домашная задания в институте) но тут...

Подправьте пожалуйста в коде
Помогите пожалуйста с кодом, 3 дня сижу над ним. Там скорее всего пустяк, но пока не получается. заранее спасибо. Вот задача. Пусть...

Подправьте пожалуйста ошибку
1. Напишите запрос на обновление таблицы Агент2 (копия таблицы Агент), который бы установил комиссионные агентов в размере: - 15% от...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru