Разделение списка на подсписки: в первый n элементов с начала списка, во второй оставшиеся - Lisp

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

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

Определите функцию, осуществляющую разделение исходного списка на два подсписка. В первый из них должно попасть указанное количество элементов с начала списка, во второй — оставшиеся элементы.
(defun F (L M)
 (if L
  (if (zerop M)
   (cons nil (cons L nil))
   ((lambda (elem result)
     (cons
      (cons elem (car result))
      (cdr result)))
    (car L)
    (F (cdr L) (1- M))))))
Как проверить этот код?

Решение задачи: «Разделение списка на подсписки: в первый n элементов с начала списка, во второй оставшиеся»

textual
Листинг программы
(defun split (lst n)
  (let ((a nil)
        (b nil))
   (iter (for x in lst) (for i upfrom 1) (if (<= i n) (collecting x into a)
                                                      (collecting x into b)))
   (list a b)))
 
==> split
 
(split '(a b c d e f g) 3)
 
==> ((a b c) (d e f g))

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

В коде определён вспомогательный внутренний функциональный язык программирования Lisp с именем split, который принимает два аргумента: lst и n. Аргумент lst является списком, который необходимо разделить на подсписки, а аргумент n — натуральное число, определяющее количество элементов в первом подсписке. Функция split использует встроенную функцию iter, которая позволяет осуществить итерацию по элементам списка lst. Внутри iter два вложенных цикла:

  1. Внешний цикл for x in lst перебирает все элементы списка lst.
  2. Внутренний цикл for i upfrom 1 выполняет итерацию, сопровождающуюся проверкой условия: если значение переменной i меньше или равно n, то элемент x собирается в первый подсписок a, иначе он собирается во второй подсписок b. В конце выполнения функции split возвращается список, состоящий из двух подсписков: a и b. Пример использования функции split: (split '(a b c d e f g) 3) Выполнение кода приводит к следующему результату: ((a b c) (d e f g))

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


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

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

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