Задача на написание функции, выполняющей обработку - Lisp

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

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

Здравствуйте, помогите пожалуйста с заданием, никак не получается решить; нужно написать функцию, выполняющую обработку и привести набор тестовых вызовов описанной функции, демонстрирующих все варианты ее работы. 1. Описать функцию, которая определяла бы положение атома в списке (воз- вращала бы порядковый номер атома в списке). 2. Описать функцию, которая, выдавала бы элемент списка по заданному но- меру. 3. Описать функцию, которая находила бы сумму всех числовых элементов в списке.

Решение задачи: «Задача на написание функции, выполняющей обработку»

textual
Листинг программы
(defun pos (a lst)
  (let ((i 0))
    (dolist (x lst nil)
      (when (eq a x) (return i))
      (setq i (+ i 1)))))
 
==> POS
 
(pos 5 '(1 2 3 4 5 6))
 
==> 4
 
(pos 55 '(1 2 3 4 5 6))
 
==> NIL
 
(defun get-by-num (n lst)
  (dotimes (i n (car lst))
    (setq lst (cdr lst))))
 
==> GET-BY-NUM
 
(get-by-num 1 '(a b c))
 
==> B
 
(get-by-num 0 '(a b c))
 
==> A
 
(get-by-num 10 '(a b c))
 
==> NIL
 
(defun sum-num (lst)
  (let ((s 0))
    (dolist (i lst s)
     (when (numberp i) (setq s (+ i s))))))
 
==> SUM-NUM
 
(sum-num '(d f 5 6 d))
 
==> 11
 
(sum-num '(d f 5 6 (d)))
 
==> 11

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

  1. Написана функция pos, которая принимает два аргумента: a и lst.
  2. Функция pos ищет элемент a в списке lst и возвращает его индекс.
  3. Если элемент a найден, функция возвращает его индекс. Если элемент a не найден, функция продолжает перебирать список lst и увеличивать значение переменной i на 1.
  4. Значение переменной i увеличивается на 1 после каждой итерации цикла.
  5. Если элемент a не найден, функция возвращает nil.
  6. Написана функция get-by-num, которая принимает три аргумента: n, lst и возвращает элемент списка lst с индексом n.
  7. Функция get-by-num использует цикл dotimes, чтобы перебрать элементы списка lst с индексами от 0 до n.
  8. Если индекс i меньше или равен n, функция возвращает элемент списка lst с индексом i.
  9. Если индекс i больше n, функция возвращает nil.
  10. Написана функция sum-num, которая принимает один аргумент: lst.
  11. Функция sum-num ищет все числовые элементы в списке lst и возвращает их сумму.
  12. Функция sum-num использует цикл dolist, чтобы перебрать элементы списка lst.
  13. Если элемент i является числом, функция увеличивает значение переменной s на сумму i и s.
  14. Если элемент i не является числом, функция пропускает его и переходит к следующей итерации цикла.
  15. Функция sum-num возвращает сумму всех числовых элементов в списке lst.
  16. Если список lst пуст, функция возвращает 0.
  17. Если список lst содержит только символы, функция возвращает 0.
  18. Если список lst содержит только нечисловые элементы, функция возвращает 0.
  19. Если список lst содержит только числовые элементы, функция возвращает их сумму.
  20. Если список lst содержит как числовые, так и нечисловые элементы, функция возвращает 0.

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


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

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

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