Задача на написание функции, выполняющей обработку - 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
Объяснение кода листинга программы
- Написана функция
pos
, которая принимает два аргумента:a
иlst
. - Функция
pos
ищет элементa
в спискеlst
и возвращает его индекс. - Если элемент
a
найден, функция возвращает его индекс. Если элементa
не найден, функция продолжает перебирать списокlst
и увеличивать значение переменнойi
на 1. - Значение переменной
i
увеличивается на 1 после каждой итерации цикла. - Если элемент
a
не найден, функция возвращаетnil
. - Написана функция
get-by-num
, которая принимает три аргумента:n
,lst
и возвращает элемент спискаlst
с индексомn
. - Функция
get-by-num
использует циклdotimes
, чтобы перебрать элементы спискаlst
с индексами от 0 доn
. - Если индекс
i
меньше или равенn
, функция возвращает элемент спискаlst
с индексомi
. - Если индекс
i
большеn
, функция возвращаетnil
. - Написана функция
sum-num
, которая принимает один аргумент:lst
. - Функция
sum-num
ищет все числовые элементы в спискеlst
и возвращает их сумму. - Функция
sum-num
использует циклdolist
, чтобы перебрать элементы спискаlst
. - Если элемент
i
является числом, функция увеличивает значение переменнойs
на суммуi
иs
. - Если элемент
i
не является числом, функция пропускает его и переходит к следующей итерации цикла. - Функция
sum-num
возвращает сумму всех числовых элементов в спискеlst
. - Если список
lst
пуст, функция возвращает 0. - Если список
lst
содержит только символы, функция возвращает 0. - Если список
lst
содержит только нечисловые элементы, функция возвращает 0. - Если список
lst
содержит только числовые элементы, функция возвращает их сумму. - Если список
lst
содержит как числовые, так и нечисловые элементы, функция возвращает 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д