Небольшой пример и реализация - Lisp

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

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

Доброго времени суток. Я сам не знаток в LISP-е. Но нужно реализовать вот такой пример. Прошу помощи. Дается список произвольных атомов L. Применив рекурсию и переменные коллектора сделаете чтобы элементы L были в следующей очередность: 1 сначала все символические атомы а потом все остальные, то есть численные атомы.

Решение задачи: «Небольшой пример и реализация»

textual
Листинг программы
(defun F (lst &optional sym num)
  (cond
    ((null lst) (nconc sym num))
    ((symbolp (car lst)) (F (cdr lst) (cons (car lst) sym) num))
    ((numberp (car lst)) (F (cdr lst) sym (cons (car lst) num)))
  )
)
 
(F '(1 2 a 3 b 4 c d 5 6 7 8 e f))
; (F E D C B A 8 7 6 5 4 3 2 1)

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

В данном коде представлена реализация функции F, которая принимает два аргумента: lst — список, и опциональные аргументы sym и num — числа. Список lst обрабатывается рекурсивно. Если lst — пустой список, то возвращается sym, объединенное с num. Если первый элемент lst является символом, то он добавляется в начало нового списка, который передается в функцию F для обработки оставшейся части списка. Если первый элемент lst является числом, то он добавляется в конец нового списка, который передается в функцию F для обработки оставшейся части списка. Таким образом, функция F изменяет порядок элементов в списке, перемещая все символы в начало списка, а все числа — в конец. При вызове функции F с аргументом '(1 2 a 3 b 4 c d 5 6 7 8 e f) в качестве sym используется пустой список, а в качестве num используется список (8 7 6 5 4 3 2 1). Таким образом, результатом выполнения кода будет список (8 7 6 5 4 3 2 1), так как все символы были перемещены в начало списка, а все числа — в конец.

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

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