Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 28.12.2014
Сообщений: 13

Описать функцию, которая по атому и списку выдает множество всех атомов в списке

09.01.2015, 10:08. Показов 1631. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Опишите функцию послед(x, y, n), которая по атому x и списку y выдает множество всех атомов в y, непосредственно следующих за каждым вхождением x в y на заданном уровне n

Помогите, пожалуйста!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.01.2015, 10:08
Ответы с готовыми решениями:

Описать функцию, которая находила бы сумму всех числовых атомов в списке, учитывая все атомы подсписков
Описать функцию, которая находила бы сумму всех числовых атомов в списке, учитывая все атомы подсписков.

Clojure Описать функцию, которая находила бы сумму всех числовых атомов в списке, учитывая все атомы подсписков
Описать функцию, которая находила бы сумму всех числовых атомов в списке, учитывая все атомы подсписков.

Написать функцию, которая вычисляет количество всех атомов в списке(кроме NIL) с учетом всех подсписков всех уровней вложенности
Написать функцию, которая вычисляет количество всех атомов в списке(кроме NIL) с учетом всех подсписков всех уровней вложенности

8
 Аватар для _sg
4706 / 4401 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
09.01.2015, 14:47
как вариант:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(defun dive-elms (n w &aux (a (car w)) (d (cdr w)))
   (cond ((null w) nil)
         ((= n 0) w)
         ((atom a) (dive-elms n d))
         ((nconc (dive-elms (1- n) a) (dive-elms n d)))))
 
(defun next (w z &aux (a (car w)) (d (cdr w)))
  (cond ((null w) nil)
        ((eq a z) (cons (car d) (next (cdr d) z)))
        ((next d z))))
 
(defun dive-next (n w z)
  (next (dive-elms n w) z))
 
> (dive-next 0 '(a 1 (b 10 (c 100)) (b 10 (c 100 (d 1000)) e)) 'a)
(1)
> (dive-next 1 '(a 1 (b 10 (c 100)) (b 10 (c 100 (d 1000)) e)) 'b)
(10 10)
> (dive-next 2 '(a 1 (b 10 (c 100)) (b 10 (c 100 (d 1000)) e)) 'c)
(100 100)
> (dive-next 3 '(a 1 (b 10 (c 100)) (b 10 (c 100 (d 1000)) e)) 'd)
(1000)
3
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38162 / 21097 / 4306
Регистрация: 12.02.2012
Сообщений: 34,684
Записей в блоге: 14
09.01.2015, 18:19
Лучший ответ Сообщение было отмечено syxomlinka как решение

Решение

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 task (x lst n &optional (p 0))
  (let ((res nil) (tmp nil))
    (cond ((= n p) 
           (dolist (i lst (reverse (flatten res)))
             (when (and (eq (car tmp) x) (atom i)) (push i res))
             (when (atom i) (push i tmp)))) 
          ((< p n)
           (dolist (i lst (reverse (flatten res)))
             (when (listp i) (push (task x i n (+ p 1)) res))))
          (t nil))))
 
==> task
 
(task 'a '(a 1 (b 10 (c 100)) (b 10 (c 100 (d 1000)) e)) 0)
 
==> (1)
 
(task 'b '(a 1 (b 10 (c 100)) (b 11 (c 100 (d 1000)) e)) 1)
 
==> (10 11)
 
(task 'c '(a 1 (b 10 (c 100)) (b 11 (c 101 (d 1000)) e)) 2)
 
==> (100 101)
 
(task 'd '(a 1 (b 10 (c 100)) (b 11 (c 101 (d 1000)) e)) 3)
 
==> (1000)
3
1 / 1 / 0
Регистрация: 28.12.2014
Сообщений: 13
10.01.2015, 15:46  [ТС]
спасибо всем большое за ответы!!!
0
1 / 1 / 0
Регистрация: 28.12.2014
Сообщений: 13
12.01.2015, 08:26  [ТС]
Цитата Сообщение от _sg Посмотреть сообщение
Lisp
1
((nconc (dive-elms (1- n) a) (dive-elms n d)))))
А Вы не могли бы мне эту строчку объяснить? Я понимаю, что nconc объединяет эти две части, полученные от рекурсивных вызовов, примерно понимаю почему 1- n, потому что мы как бы входим на следующий уровень вложенности..Но почему 1- n, ведь в lisp-e инфиксная запись...или это не минус совсем?
0
 Аватар для _sg
4706 / 4401 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
12.01.2015, 09:54
это функция 1-, (1- n) можно заменить на (- n 1).

Добавлено через 3 минуты
о функциях 1+ и 1-: http://www.lispworks.com/docum... 1pl_1_.htm

Добавлено через 3 минуты
Common Lisp HyperSpec Master Index
2
1 / 1 / 0
Регистрация: 28.12.2014
Сообщений: 13
12.01.2015, 10:05  [ТС]
Спасибо большое!!
0
0 / 0 / 0
Регистрация: 10.06.2014
Сообщений: 3
21.01.2016, 19:27
_sg, А вы можете эту же программу мне объяснить или написать код так, чтобы только использовался cond, cons и рекурсии? Помогите мне пожалуйста.
0
 Аватар для _sg
4706 / 4401 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
21.01.2016, 19:44
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(defun dive-elms (n w)
  (cond ((null w) nil)
        ((= n 0) w)
        ((atom (car w)) (dive-elms n (cdr w)))
        ((append (dive-elms (- n 1) (car w)) (dive-elms n (cdr w))))))
 
(defun next (w z)
  (cond ((null w) nil)
        ((eq (car w) z) (cons (cadr w) (next (cddr w) z)))
        ((next (cdr w) z))))
 
(defun dive-next (n w z)
  (next (dive-elms n w) z))
 
> (dive-next 0 '(a 1 (b 10 (c 100)) (b 10 (c 100 (d 1000)) e)) 'a)
(1)
> (dive-next 1 '(a 1 (b 10 (c 100)) (b 10 (c 100 (d 1000)) e)) 'b)
(10 10)
> (dive-next 2 '(a 1 (b 10 (c 100)) (b 10 (c 100 (d 1000)) e)) 'c)
(100 100)
> (dive-next 3 '(a 1 (b 10 (c 100)) (b 10 (c 100 (d 1000)) e)) 'd)
(1000)
Добавлено через 1 минуту
http://www.lispworks.com/docum... append.htm
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.01.2016, 19:44
Помогаю со студенческими работами здесь

Написать функцию, аргументом которой является список атомов, которая выдает значение ИСТИННА(Т), если в списке есть три и более одинаковых атома
Написать функцию, аргументом которой является список атомов, которая выдает значение ИСТИННА(Т), если в списке есть три и более одинаковых...

Описать функцию, которая находила бы сумму всех числовых элементов в списке
описать функцию, которая находила бы сумму всех числовых элементов в списке. Список может содержать подсписки произвольной глубины.

Описать функцию или процедуру замены в списке L всех вхождений E1 на Е2
Описать функцию или процедуру, которая: в) заменяет в списке L все вхождения E1 на Е2

Clojure Определите функцию (f s n), которая из списка чисел s создает новый список, прибавляя к каждому атому число n
Определите функцию (f s n), которая из списка чисел s создает новый список, прибавляя к каждому атому число n. Исходный список не...

Описать процедуру или функцию, которая оставляет в списке L только первые вхождения одинаковых элементов
Описать процедуру или функцию, которая оставляет в списке L только первые вхождения одинаковых элементов.


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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