Даны атом и S-выражение. Определить функцию, вычисляющую, сколько всего атомов в этом S-выражение исключая заданный атом - Lisp

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

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

Даны атом и S-выражение. Определить функцию, вычисляющую, сколько всего атомов в этом S-выражение исключая заданный атом. Например: если дано "2 (1 2 (3 (2 4)) (5 2))", ответом будет "4";.

Решение задачи: «Даны атом и S-выражение. Определить функцию, вычисляющую, сколько всего атомов в этом S-выражение исключая заданный атом»

textual
Листинг программы
(defun cnt-sine (a w)
  (length (remove a (ftn w))))
 
(defun ftn (w)
  (loop for a in w
        if (listp a) append (ftn a)
        else collect a))
 
> (cnt-sine 2 '(1 2 (3 (2 4)) (5 2)))
4

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

В коде определены две функции:

  1. cnt-sine (функция) Аргументы: a — заданный атом, w — S-выражение. Вычисляет количество атомов в S-выражении, исключая заданный атом. Результат: количество атомов в S-выражении, исключая заданный атом.
  2. ftn (функция) Аргументы: w — S-выражение. Рекурсивно обходит все атомы в S-выражении, Если атом является списком, то рекурсивно вызывает функцию ftn для каждого элемента списка. Иначе, добавляет атом в результат. Результат: список, содержащий все атомы в S-выражении, кроме заданного атома. Разберём код по шагам:
  3. В функции cnt-sine, первым аргументом является число 2, вторым аргументом является S-выражение '(1 2 (3 (2 4)) (5 2)).
  4. В функции ftn, первым аргументом является S-выражение '(1 2 (3 (2 4)) (5 2)).
  5. В функции ftn, рекурсивно вызывается функция ftn для каждого элемента списка.
  6. Результатом функции ftn является список, содержащий все атомы в S-выражении, кроме заданного атома.
  7. Функция cnt-sine вызывает функцию ftn с аргументом '(1 2 (3 (2 4)) (5 2)) и вычисляет длину полученного списка.
  8. Результатом выполнения кода является число 4.

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


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

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

12   голосов , оценка 3.917 из 5
Похожие ответы