День добрый! Можете прокомментировать код программы на Лиспе - Lisp

Узнай цену своей работы

Формулировка задачи:

Помогите разобраться в коде) Множества заданы списками строк L1 и L2. Получить в виде списка L3 множество L1\L2. Код программы:
Листинг программы
  1. (defun foo (&rest sets)
  2. (let ((rests (rest sets)))
  3. (loop for i in (first sets)
  4. when (not (remove
  5. nil
  6. (mapcar
  7. #'(lambda (s) (member i s))
  8. rests)))
  9. collect i)))
  10. (foo '(1 2 3 4) '(3 4) '(4 5))

Решение задачи: «День добрый! Можете прокомментировать код программы на Лиспе»

textual
Листинг программы
  1. (defun foo (&rest sets)
  2. ;;&rest говорит о том дальше идет неогранниченное количество аргументов для функции,
  3. ;;и доступ к этим аргументам будет через переменную sets
  4. ;;В случае (foo '(1 2 3 4) '(3 4) '(4 5))  ->  sets = '((1 2 3 4) (3 4) (4 5))
  5.   (let ((rests (rest sets)))
  6.   ;;создаем локальную переменную rests которая равна хвосту списка sets     ->     rests = '((3 4) (4 5))
  7.     (loop for i in (first sets)
  8.     ;;Цикл в котором переменной i присваиваем значения головы списка sets   -> i = 1, i =2, i = 3, i = 4
  9.     ;;Для Java это for(Integer i : sets[0]) {}
  10.       when (not (remove nil (mapcar #'(lambda (s) (member i s)) rests)))  collect i)))
  11.             ;;when то же самое что if
  12.             ;;Грубо говоря, если неправда то что в остальных списках (из которых удаляем все nil) нет элементов то накапливаем i
  13.             ;;затем возвращаем накопленное значение
  14.             ;; otevet: (1 2)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы