Поделить список на два: в первом числа, во втором символы - Lisp

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

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

Добрый день! Имеем исходный список например: (a 1 b 2 c 3 d 4) нужно его разделить на два чтобы в первый список вошли только числа а во второй только символы. т. е. 1) (1 2 3 4) 2) (a b c d) Имею вот такие наработки:
(defun f1 (sp)
  (cond ((null sp) nil)
        ((numberp (car sp)) )
        ((symbolp (car sp)) )
   )
)
Но не знаю как сформировать сами списки( Заранее благодарен!

Решение задачи: «Поделить список на два: в первом числа, во втором символы»

textual
Листинг программы
(defun task (lst)
  (list  (remove-if 'symbolp lst) (remove-if-not 'symbolp lst)))
 
==> task
 
(task '(a 1 b 2 c 3 d 4))
 
==> ((1 2 3 4) (a b c d))

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

В коде определена функция task, которая принимает один аргумент lst. Внутри функции происходит следующее:

  1. Создается список, который содержит два элемента: первый элемент — это результат работы функции remove-if, второй элемент — это результат работы функции remove-if-not.
    • Элементы списка создаются с помощью функции list.
    • Функция remove-if применяется к переменной lst и возвращает новый список, в котором содержатся только те элементы, которые не являются символами.
    • Функция remove-if-not применяется к переменной lst и возвращает новый список, в котором содержатся только те элементы, которые являются символами.
  2. Результат работы функции task выводится на экран с помощью функции print.
    • В данном случае выводится список ((1 2 3 4) (a b c d)).

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


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

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

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