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

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

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

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

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

textual
Листинг программы
  1. (defun split (lst n)
  2.   (let ((a nil)
  3.         (b nil))
  4.    (iter (for x in lst) (for i upfrom 1) (if (<= i n) (collecting x into a)
  5.                                                       (collecting x into b)))
  6.    (list a b)))
  7.  
  8. ==> split
  9.  
  10. (split '(a b c d e f g) 3)
  11.  
  12. ==> ((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

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

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

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