Цикл в цикле - Lisp
Формулировка задачи:
- (DEFUN F (list1 list2)
- (SETQ list3 '())
- (do (( i list1 ()))
- ((NULL list1) list3)
- ((SETF S1 (CAR i)) (CDR i)
- (do
- ((j list2 () ))
- ((NULL list2) list3)
- ((SETF S2 (CAR j)) (CDR j) (if (EQUAL S1 S2) (CONS S2 list3)))))))
Решение задачи: «Цикл в цикле»
- (defun sym-diff (lst1 lst2)
- (let ((r nil))
- (dolist (i lst1 t)
- (when (not (member i lst2)) (push i r)))
- (dolist (i lst2 r)
- (when (not (member i lst1)) (push i r)))))
- ==> SYM-DIFF
- (sym-diff '(a b c d e f g) '(e f g h i j k l))
- ==> (L K J I H D C B A)
Объяснение кода листинга программы
В данном коде реализована функция sym-diff
, которая принимает два списка lst1
и lst2
и возвращает список, содержащий элементы, которые есть в lst1
, но отсутствуют в lst2
.
Функция использует два вложенных цикла dolist
. Первый цикл проходит по каждому элементу lst1
. Для каждого элемента i
в lst1
проверяется, присутствует ли он в lst2
с помощью функции member
. Если элемент отсутствует в lst2
, он добавляется в конец результирующего списка r
с помощью функции push
.
Второй цикл проходит по каждому элементу lst2
. Для каждого элемента i
в lst2
проверяется, присутствует ли он в lst1
с помощью функции member
. Если элемент отсутствует в lst1
, он добавляется в конец результирующего списка r
с помощью функции push
.
В итоге, результирующий список r
будет содержать элементы, которые есть в lst1
, но отсутствуют в lst2
.
Ответ:
- Функция
sym-diff
принимает два спискаlst1
иlst2
. - Вложенные циклы
dolist
проходят по каждому элементуlst1
иlst2
. - Для каждого элемента
i
вlst1
проверяется, присутствует ли он вlst2
с помощью функцииmember
. - Если элемент отсутствует в
lst2
, он добавляется в конец результирующего спискаr
с помощью функцииpush
. - Для каждого элемента
i
вlst2
проверяется, присутствует ли он вlst1
с помощью функцииmember
. - Если элемент отсутствует в
lst1
, он добавляется в конец результирующего спискаr
с помощью функцииpush
. - Результирующий список
r
будет содержать элементы, которые есть вlst1
, но отсутствуют вlst2
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д