Написать функцию с одним аргументом – списком. Если функция из п. а) возвращает t, создать список из четырех элементов: - Lisp

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

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

Всем привет! Задание: а) Напишите функцию, единственный аргумент которой является списком. Функция возвращает t только в том случае, если первые два элемента этого списка являются списками. В остальных случаях функция должна выдавать nil. б) написать функцию с одним аргументом – списком. Если функция из п. а) возвращает t, создать список из четырех элементов: 1 и 2 элемент 1-го списка + 1 и 2 элементы 2-го списка. Если функция возвращает nil, то убрать из списка первые два элемента. Часть А выглядит вот так:
(defun fn(n)
  (cond ((< (length n) 2) nil)
        (T (and (listp (car n))(listp (cadr n))))nil))
С частью Б проблемы. Связывает элементы функция append, но как вытащить из разных списков эти первые 2 элемента?

Решение задачи: «Написать функцию с одним аргументом – списком. Если функция из п. а) возвращает t, создать список из четырех элементов:»

textual
Листинг программы
(defun a (w)
 (when (cdr w) (and (listp (car w)) (listp (cadr w)))))
 
(defun b (w)
  (if (a w) (list (caar w) (cadar w) (caadr w) (cadadr w))
      (nthcdr 2 w)))
 
> (b '((a b d) (e f g) h i))
(A B E F)
> (b '((a) (e) h i))
(A NIL E NIL)
> (b '((a) h i))
(I)

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

В коде определены две функции:

  1. Функция a с одним аргументом w. В данном случае, она возвращает t, если w является списком и имеет более одного элемента. В противном случае, функция возвращает nil.
  2. Функция b с одним аргументом w. Если функция a возвращает t, то есть список w не пустой, то функция b возвращает список, состоящий из первого, второго, третьего и четвертого элементов списка w. В противном случае, функция возвращает nil, который является вторым элементом списка w. Примеры вызовов функций:
  3. (b '((a b d) (e f g) h i)) Результат: (A B E F)
  4. (b '((a) (e) h i)) Результат: (A NIL E NIL)
  5. (b '((a) h i)) Результат: (I)

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


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

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

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