Определить номер первого вхождения заданного элемента в список - Lisp
Формулировка задачи:
Необходимо написать функцию, которая определяет номер первого вхождения заданого элемента в список L
Решение задачи: «Определить номер первого вхождения заданного элемента в список»
textual
Листинг программы
(defun pos-in-list (lst elt &optional (p 0)) (if (null lst) nil (if (equal (car lst) elt) p (pos-in-list (cdr lst) elt (+ p 1))))) ==> pos-in-list (pos-in-list '(1 2 3 a b c) 'a) ==> 3 (pos-in-list '((1 2) (3 a) (b c)) '(b c)) ==> 2 (pos-in-list '((1 2) (3 a) (b c)) '(c d)) ==> NIL
Объяснение кода листинга программы
В коде определённая функция pos-in-list
принимает три аргумента: lst
(список), elt
(элемент) и p
(счётчик). Если список lst
пуст, то возвращается nil
. Если первый элемент списка lst
равен elt
, то возвращается значение счётчика p
. В противном случае, рекурсивно вызывается функция pos-in-list
для списка cdr lst
и аргументов elt
и p+1
.
Пример использования функции:
(pos-in-list '(1 2 3 a b c) 'a)
— в этом примере функция будет искать первое вхождение символа 'a' в списке '(1 2 3 a b c). Возвращаемое значение будет 3, так как 'a' находится на третьей позиции в списке.(pos-in-list '((1 2) (3 a) (b c)) '(b c))
— в этом примере функция будет искать первое вхождение списка '(b c)' в списке '((1 2) (3 a) (b c)). Возвращаемое значение будет 2, так как '(b c)' находится на второй позиции в списке.(pos-in-list '((1 2) (3 a) (b c)) '(c d))
— в этом примере функция будет искать первое вхождение списка '(c d)' в списке '((1 2) (3 a) (b c)). Возвращаемое значение будетnil
, так как '(c d)' не найден в списке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д