День добрый! Можете прокомментировать код программы на Лиспе - Lisp
Формулировка задачи:
Помогите разобраться в коде)
Множества заданы списками строк L1 и L2. Получить в виде списка L3 множество L1\L2.
Код программы:
(defun foo (&rest sets) (let ((rests (rest sets))) (loop for i in (first sets) when (not (remove nil (mapcar #'(lambda (s) (member i s)) rests))) collect i))) (foo '(1 2 3 4) '(3 4) '(4 5))
Решение задачи: «День добрый! Можете прокомментировать код программы на Лиспе»
textual
Листинг программы
(defun foo (&rest sets) ;;&rest говорит о том дальше идет неогранниченное количество аргументов для функции, ;;и доступ к этим аргументам будет через переменную sets ;;В случае (foo '(1 2 3 4) '(3 4) '(4 5)) -> sets = '((1 2 3 4) (3 4) (4 5)) (let ((rests (rest sets))) ;;создаем локальную переменную rests которая равна хвосту списка sets -> rests = '((3 4) (4 5)) (loop for i in (first sets) ;;Цикл в котором переменной i присваиваем значения головы списка sets -> i = 1, i =2, i = 3, i = 4 ;;Для Java это for(Integer i : sets[0]) {} when (not (remove nil (mapcar #'(lambda (s) (member i s)) rests))) collect i))) ;;when то же самое что if ;;Грубо говоря, если неправда то что в остальных списках (из которых удаляем все nil) нет элементов то накапливаем i ;;затем возвращаем накопленное значение ;; otevet: (1 2)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д