Определить номер первого вхождения заданного элемента в список - Lisp

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

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

Необходимо написать функцию, которая определяет номер первого вхождения заданого элемента в список L

Решение задачи: «Определить номер первого вхождения заданного элемента в список»

textual
Листинг программы
  1. (defun pos-in-list (lst elt &optional (p 0))
  2.   (if (null lst) nil (if (equal (car lst) elt) p (pos-in-list (cdr lst) elt (+ p 1)))))
  3.  
  4. ==> pos-in-list
  5.  
  6. (pos-in-list '(1 2 3 a b c) 'a)
  7.  
  8. ==> 3
  9.  
  10. (pos-in-list '((1 2) (3 a) (b c)) '(b c))
  11.  
  12. ==> 2
  13.  
  14. (pos-in-list '((1 2) (3 a) (b c)) '(c d))
  15.  
  16. ==> NIL

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

В коде определённая функция pos-in-list принимает три аргумента: lst (список), elt (элемент) и p (счётчик). Если список lst пуст, то возвращается nil. Если первый элемент списка lst равен elt, то возвращается значение счётчика p. В противном случае, рекурсивно вызывается функция pos-in-list для списка cdr lst и аргументов elt и p+1. Пример использования функции:

  1. (pos-in-list '(1 2 3 a b c) 'a) — в этом примере функция будет искать первое вхождение символа 'a' в списке '(1 2 3 a b c). Возвращаемое значение будет 3, так как 'a' находится на третьей позиции в списке.
  2. (pos-in-list '((1 2) (3 a) (b c)) '(b c)) — в этом примере функция будет искать первое вхождение списка '(b c)' в списке '((1 2) (3 a) (b c)). Возвращаемое значение будет 2, так как '(b c)' находится на второй позиции в списке.
  3. (pos-in-list '((1 2) (3 a) (b c)) '(c d)) — в этом примере функция будет искать первое вхождение списка '(c d)' в списке '((1 2) (3 a) (b c)). Возвращаемое значение будет nil, так как '(c d)' не найден в списке.

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


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

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

12   голосов , оценка 3.917 из 5

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

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

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