Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 02.12.2013
Сообщений: 14
1

Рекурсия: получить список атомов, представляющих множество элементов, входящих в X и не входящих в Y

16.01.2014, 09:40. Просмотров 808. Ответов 3
Метки нет (Все метки)

Определить функцию (разность х у), результатом которой является список атомов, представляющих множество элементов, входящих в х и не входящих в у. Вот код программы:
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
29
30
31
32
33
34
35
36
37
38
CL-USER 1 > (defun ap (x y)
               (cond ((eq x nil) y)
                 (t (cons (car x) (ap (cdr x) y)))))
AP
 
CL-USER 2 > (defun vur (x)
               (cond ((eq x nil) nil)
                ((atom (car x)) (cons (car x) (vur (cdr x))))
                  (t (ap (vur (car x)) (vur (cdr x))))))
VUR
 
CL-USER 3 > (defun prov (x a)
              (cond ((eq x nil) nil)
                ((eq (car x) a) t)
                  (t (prov (cdr x) a))))
PROV
 
CL-USER 4 > (defun ydalit (x)
              (cond ((eq x nil) nil)
                ((eq (car x) a ) t)
                  (t (prov (cdr x) a))))
YDALIT
 
CL-USER 5 > (defun разность (x y)
              (if (eq x nil) x
              (if (not (prov y (car x)))
              (cons (car x) (разность (cdr x) y))
              (разность (cdr x) y))))
разность
 
CL-USER 6 > (setq x '((1 2) 3))
((1 2) 3)
 
CL-USER 7 > (setq y '(2 (3 5)))
(2 (3 5))
 
CL-USER 8 > (разность (ydalit (vur x)) (ydalit (vur y)))
(1)
что выполняет функция YDALIT и как она работает?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.01.2014, 09:40
Ответы с готовыми решениями:

Определить функцию (разность х у), результатом которой является список атомов, представляющих множество элементов, входящих в х и не входящих в у
Объясните пожалуйста работу функции MINUS. Определить функцию (разность х у), результатом которой...

Множество атомов, входящих только в первый из двух списков
Здравствуйте, помогите пожалуйста решить задачу и нужно привести набор тестовых вызовов описанной...

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

Получить из списка произвольных атомов список атомов, которые в исходном списке встречаются один раз
Построить список атомов, которые встречаются в заданном списке ровно один раз.

3
Модератор
Эксперт Python
28007 / 14962 / 2949
Регистрация: 12.02.2012
Сообщений: 24,521
Записей в блоге: 4
16.01.2014, 12:09 2
0) Код нужно форматировать тегами;
1) На мой взгляд, функция YDALIT очень некорректно составлена. Она использует свободную переменную a в своем теле. Это будет работать, только при использовании глобальных переменных (или при вызове всех функций в общем лексическом контексте). Мое мнение - так делать не надо. Тем более, что задача достаточно просто решается "в одно действие":

Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun diff (x y)
  (cond ((null x) nil)
        ((member (car x) y) (diff (cdr x) y))
        (t (cons (car x) (diff (cdr x) y)))))
 
 
==> diff
 
(diff '(1 2 3 4 5) '(3 4 5 6 7))
 
==> (1 2)
2) довольно странно, что некоторые функции названы по-русски, а некоторые - на "руглише"...
1
0 / 0 / 0
Регистрация: 02.12.2013
Сообщений: 14
16.01.2014, 13:35  [ТС] 3
Извините, там ошибка, так выглядит функция, как она работает и что выполняет
Lisp
1
2
3
4
5
              (defun ydalit (x)
                  (if (eq (cdr x) nil) x
                   (if (not (prov (cdr x) (car x)))
                   (cons (car x) (ydalit (cdr x)))
                    (ydalit (cdr)))))
0
Модератор
Эксперт Python
28007 / 14962 / 2949
Регистрация: 12.02.2012
Сообщений: 24,521
Записей в блоге: 4
16.01.2014, 14:23 4
Lisp
1
2
3
4
5
6
(defun ydalit (x)
   (if (eq (cdr x) nil) ;; если x = Nil  
        x  ;; возвращаем Nil
       (if (not (prov (cdr x) (car x))) ;; иначе, если первый элемент x не содержится в остатке
           (cons (car x) (ydalit (cdr x))) ;; присоединим
           (ydalit (cdr))))) ;; если содержится - пропускаем
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.01.2014, 14:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

Найти сумму элементов, входящих как в множество А, так и в множество В
Задано множества А и В, состоящие из двузначных чисел. Найти сумму тех элементов, входящих как в...

Сформировать очередь из элементов, входящих в одну из очередей Queue1 и Queue2, но не входящих в другую из них
описать процедуру которая формирует очередь Queue,включив в неё по одному разу элементы ,которые...

Построить множество, состоящее из всех элементов арифметической прогрессии, входящих в диапазон [0, 255]
арифметическая прогрессия задана натуральными числами a1 и d. Построить множество, состоящее из...


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

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

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