Объясните как работает &optional на примере - Lisp

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

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

Объясните пожалуйста как работает здесь опшионал: у него здесь при каждом рекурсивном обращении в f присваивается хвост списка? Обрабатываемый список записывается на протяжении всей программы записывается в F, и потом его же программа возвращает по завершении? Помогите разобраться)
Листинг программы
  1. (defun task (lst a x &optional (f (cdr lst)))
  2. (cond ((null lst) nil)
  3. ((eq (car lst) a) (rplacd f (cons x (cdr lst))) (task (cddr lst) a x (cdr lst)))
  4. (t (task (cdr lst) a x (cdr lst)))))
  5. ==> task
  6.  
  7. (setq *z* '(1 2 3 4 2 5 2))
  8. ==> (1 2 3 4 2 5 2)
  9. (task *z* 2 '!)
  10. ==> NIL
  11. *z*
  12. ==> (1 2 ! 3 4 2 ! 5 2 !)

Решение задачи: «Объясните как работает &optional на примере»

textual
Листинг программы
  1.    (defun i-sumlist (lst s)
  2.      (if (null lst) s (i-sumlist (cdr lst) (+ s (car lst)))) ;; в накопительном параметре накапливается сумма
  3.  
  4.    (defun sumlist(lst) (i-sumlist lst 0))

Объяснение кода листинга программы

  1. (defun i-sumlist (lst s) ...) — определение функции i-sumlist
  2. (if (null lst) s (i-sumlist (cdr lst) (+ s (car lst)))) — основной оператор if, проверяет условие (null lst), если оно истинно, то возвращает s, иначе рекурсивно вызывает функцию i-sumlist с аргументами (cdr lst) и (+ s (car lst)), где car lst — первый элемент списка lst, а cdr lst — все остальные элементы списка, начиная со второго.
  3. (defun sumlist(lst) (i-sumlist lst 0)) — определение функции sumlist, которая является оберткой для функции i-sumlist и принимает список lst и начальное значение суммы 0 в качестве аргументов.
  4. (i-sumlist lst 0) — вызов функции i-sumlist с аргументами lst и 0.

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


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

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

11   голосов , оценка 3.909 из 5

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

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

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