Функция поиска в а-списке L точечной пары, соответствующей ключу k - Lisp

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

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

Напишите функцию от двух аргументов (аналог встроенной функции assoc(l, k)), которая в а-списке l ищет точечную пару, соответствующую ключу k.

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

textual
Листинг программы
(defun task (lst k)
 (car (remove-if (lambda (x) (not (equal k (car x)))) lst)))
 
==> task
 
(task '((a . 1) (b . 2) (c . 3)) 'b)
 
==> (b . 2)
 
(task '((a . 1) (b . 2) (c . 3)) 'd)
 
==> NIL

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

В коде определена функция поиска в а-списке L точечной пары, соответствующей ключу k. Функция remove-if удаляет из списка все элементы, удовлетворяющие заданному условию (x) — это значение элемента списка, а (not (equal k (car x)))) — это условие, которое возвращает истину, если значение первого элемента в списке не равно ключу k. Функция car возвращает первый элемент из списка. В итоге, функция task возвращает найденную точечную пару, соответствующую ключу k, или NIL, если такая пара не найдена. В данном примере, функция task вызывается с аргументами '((a . 1) (b . 2) (c . 3)) и 'b. По условию задачи, нужно найти точечную пару, соответствующую ключу 'b'. Первый элемент в списке — 'a', не соответствует ключу 'b', поэтому он будет удален из списка. Второй элемент в списке — 'b', соответствует ключу 'b', и является искомым значением. Третий элемент в списке — 'c', не соответствует ключу 'b', поэтому он также будет удален из списка. В итоге, функция task вернет найденную точечную пару 'b'. Во втором примере, функция task вызывается с аргументами '((a . 1) (b . 2) (c . 3)) и 'd'. По условию задачи, нужно найти точечную пару, соответствующую ключу 'd'. Но в списке нет элементов, которые бы соответствовали ключу 'd', поэтому функция task вернет NIL.

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


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

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

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