Форум программистов, компьютерный форум, киберфорум
Наши страницы

Lisp

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
Electroflower
Shiningemerald
294 / 87 / 9
Регистрация: 05.01.2012
Сообщений: 514
Записей в блоге: 1
#1

Посчитать количество подсписков на верхнем уровне списка - Lisp

20.01.2012, 10:26. Просмотров 2286. Ответов 18
Метки нет (Все метки)

Ребят, может кто знает как решить, а то я уже запуталась:

1)Напишите рекурсивную функцию, определяющую число подсписков на верхнем уровне списка.
2)Определите предикат SETOF-P, который проверяет является ли список множеством, т.е. входит ли каждый элемент в список лишь один раз.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2012, 10:26
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Посчитать количество подсписков на верхнем уровне списка (Lisp):

Определить количество подсписков, находящихся на указанном уровне заданного списка - Lisp
Определить количество подсписков, находящихся на указанном уровне для заданного списка (defun lv-count (lst lv) (if (zerop lv) ...

Удалить из списка повторяющиеся элементы на верхнем уровне - Lisp
Определить рекурсивную функцию (SET1 x), которая удаляет из списка х повторяющиеся элементы на верхнем уровне. Рекурсия выполняется только...

Рекурсия: дописать в конце списка суммарное количество подсписков всех уровней - Lisp
Используя приёмы рекурсии в лиспе, выполнить следующие преобразования: Получать в качестве исходного, любой многоуровневый список вида...

Информация о количестве подсписков на каждом уровне вложенности - Lisp
Всем привет. Написать функцию, возвращающую список, содержащий информацию о количестве подсписков на каждом уровне вложенности:...

Написать функцию, возвращающую список, содержащий информацию о количестве подсписков на каждом уровне - Lisp
Написать функцию, возвращающую список, содержащий информацию о количестве подсписков на каждом уровне вложенности: например ((0 1) (1 0)...

Напишите функцию: которая должна производить замены X на Y только на верхнем уровне W - Lisp
Напишите функцию: которая должна производить замены X на Y только на верхнем уровне W

18
bokunopico
306 / 261 / 2
Регистрация: 03.04.2011
Сообщений: 456
20.01.2012, 11:16 #2
Первая задача:
Lisp
1
2
3
4
5
6
7
8
9
10
(defun f (lst)
  (if lst
      (+ (if (atom (car lst)) 0 1)
     (f (cdr lst)))
      0))
 
CL-USER> (f '(1 (2) (3 4)))
2
CL-USER> (f '(1 (2) (3 4 (5))))
2
Вторая задача:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun setof-p (lst)
  (labels ((f (lst tmp)
         (if lst
         (if (member (car lst) tmp :test #'equal)
             nil
             (f (cdr lst) (cons (car lst) tmp)))
         t)))
    (f lst '())))
 
CL-USER> (setof-p '(1 2 3 4 5 1))
NIL
CL-USER> (setof-p '(1 2 3 4 5 6 7))
T
CL-USER> (setof-p '(a b c (d e) (d e)))
NIL
1
Electroflower
Shiningemerald
294 / 87 / 9
Регистрация: 05.01.2012
Сообщений: 514
Записей в блоге: 1
20.01.2012, 11:27  [ТС] #3
ахх , спасибо, спасибо большое!!!!!!
0
transformator.t
defun
596 / 610 / 44
Регистрация: 30.04.2011
Сообщений: 696
20.01.2012, 11:56 #4
Lisp
1
2
3
4
5
6
7
8
9
10
(defun f (l)
           (if (null l) 0
               (if (consp (car l))
                   (1+ (f (cdr l)))
                   (f (cdr l)))))
 
(defun f-p (l)
           (if (null l) t
               (if (member (car l) (cdr l)) ()
                   (f-p (cdr l)))))
1
Electroflower
Shiningemerald
294 / 87 / 9
Регистрация: 05.01.2012
Сообщений: 514
Записей в блоге: 1
20.01.2012, 12:05  [ТС] #5
ааа) спасибо, что ответили мне!
так рада, если что еще спрошу а то я в Lisp полный ноль..
0
transformator.t
defun
596 / 610 / 44
Регистрация: 30.04.2011
Сообщений: 696
20.01.2012, 12:28 #6
bokunopico, скажи мне, зачем эта магия с labels для проверки множества, в чём тут потаённый смысл? не могу понять
0
bokunopico
306 / 261 / 2
Регистрация: 03.04.2011
Сообщений: 456
20.01.2012, 12:31 #7
Затупил же.
0
transformator.t
defun
596 / 610 / 44
Регистрация: 30.04.2011
Сообщений: 696
20.01.2012, 12:37 #8
а, понятно, ну бывает)

http://www.youtube.com/watch?v=wAmfLeCqo1w
0
bokunopico
306 / 261 / 2
Регистрация: 03.04.2011
Сообщений: 456
20.01.2012, 12:48 #9
Album: A Step To The Great Knowledge
Тонко.
0
transformator.t
defun
596 / 610 / 44
Регистрация: 30.04.2011
Сообщений: 696
20.01.2012, 13:02 #10
и в тоже время сильно
0
Electroflower
Shiningemerald
294 / 87 / 9
Регистрация: 05.01.2012
Сообщений: 514
Записей в блоге: 1
20.01.2012, 13:11  [ТС] #11
мб еще подскажете, если сможете?
1) Используя рекурсию определить функцию DIFR, формирующую разность двух множеств(т.е. удаляющую из первого множества все общие со вторым множеством элементы)
2)Напишите рекурсивную функциюAPPEND1 (x, y), которая добавляет список У к концу списка Х.
0
transformator.t
defun
596 / 610 / 44
Регистрация: 30.04.2011
Сообщений: 696
20.01.2012, 13:18 #12
2.
Lisp
1
2
3
4
(defun f-app (l1 l2)
           (if (null l1) l2
               (cons (car l1)
                     (f-app (cdr l1) l2))))
Добавлено через 4 минуты
1.
Lisp
1
2
3
4
5
6
(defun f-d (m1 m2)
           (if (null m1) ()
               (if (member (car m1) m2)
                   (f-d (cdr m1) m2)
                   (cons (car m1)
                         (f-d (cdr m1) m2)))))
тут небольшая поправочка
1
bokunopico
306 / 261 / 2
Регистрация: 03.04.2011
Сообщений: 456
20.01.2012, 13:24 #13
В первом задании изначально получилась симметрическая разность.
И не удалить сообщение теперь.
0
transformator.t
defun
596 / 610 / 44
Регистрация: 30.04.2011
Сообщений: 696
20.01.2012, 13:26 #14
уже исправлено)
0
bokunopico
306 / 261 / 2
Регистрация: 03.04.2011
Сообщений: 456
20.01.2012, 13:39 #15
Всё-таки не надо было спешить с поправкой. Хотел отомстить за labels, в итоге унизился сам.
0
20.01.2012, 13:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2012, 13:39
Привет! Вот еще темы с ответами:

Рекурсия. Определить функцию, вычисления количества элементов на верхнем уровне в списке х - Lisp
рекурсия, выполняется только в направлении cdr. и все операции над списками выполняются только с элементами верхнего уровня

Число подсписков списка (использовать рекурсию) - Lisp
Помогите решить задачу. Вычислить полное число подсписков, входящих в данный список на любом уровне. Использовать рекурсию по значению.

Вывести список сумм подсписков заданного списка - Lisp
Требуется написать функцию, выводящую список сумм подсписков заданного списка. Я написал для простых подсписков, например (f '((2 5 7) (8...

Вычислить произведение элементов списка, находящихся на n-ном уровне списка - Lisp
Написать функцию произв(x, n), которая вычисляет произведение числовых элементов списка x, находящихся на n-ном уровне списка ...


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

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

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