Работа со списками - Lisp (229429)
Формулировка задачи:
Организовать список, который будет содержать подсписки: имена столбцов и все остальные - значения строк. Требуется реализовать функции добавления,вставки и удаления.
Добавление в конец;
Вставка в указанную позицию;
Удаление по номеру.
Нужно,чтобы список имел вид "таблицы"(рисунок приложен). Не очень понятно, как это реализовывается.
Что касается удаления по номеру:
(list '(name1 name2) '(1 2) '(3 4))
(defun del (n l) (cond ((null l) nil) ( (not(atom (car l))) ( cons (del n (car l)) (del (- n (length (car l))) (cdr l))) ) ((<= n 1) (del (- n 1) (cdr l)) ) (t (cons (car l) (del (- n 1) (cdr l)))) ) )
Решение задачи: «Работа со списками»
textual
Листинг программы
(defun ins-after-row (matr row n) (cond ((= n 0) (cons (car matr) (cons row (cdr matr)))) (t (cons (car matr) (ins-after-row (cdr matr) row (- n 1)))))) ==> ins-after-row (ins-after-row '((name-1 name-2 name-3) (1 2 3) (4 5 6) (7 8 9) (a b c)) '(x y z) 2) ==> ((name-1 name-2 name-3) (1 2 3) (4 5 6) (x y z) (7 8 9) (a b c)) (ins-after-row '((name-1 name-2 name-3) (1 2 3) (4 5 6) (7 8 9) (a b c)) '(x y z) 1) ==> ((name-1 name-2 name-3) (1 2 3) (x y z) (4 5 6) (7 8 9) (a b c)) (ins-after-row '((name-1 name-2 name-3) (1 2 3) (4 5 6) (7 8 9) (a b c)) '(x y z) 0) ==> ((name-1 name-2 name-3) (x y z) (1 2 3) (4 5 6) (7 8 9) (a b c))
Объяснение кода листинга программы
Функция ins-after-row
принимает три аргумента:
matr
- список, в который нужно вставить новый элемент.row
- элемент, который нужно вставить.n
- номер элемента, после которого нужно вставитьrow
. Еслиn
равно 0, то функция возвращает новый список, в которомrow
добавлена в началоmatr
. Еслиn
больше 0, то функция рекурсивно вызывает саму себя, пока не достигнетn
равным 0, и добавляетrow
после соответствующего элемента. Вот примеры вызовов функцииins-after-row
:(ins-after-row '((name-1 name-2 name-3) (1 2 3) (4 5 6) (7 8 9) (a b c)) '(x y z) 2)
В этом примере функцияins-after-row
будет вызвана с аргументамиmatr = '((name-1 name-2 name-3) (1 2 3) (4 5 6) (7 8 9) (a b c))
,row = '(x y z)
иn = 2
. Посколькуn
больше 0, функция рекурсивно вызывает саму себя с аргументамиcdr matr = '(4 5 6)
иn = (- n 1) = 1
. Затем функция возвращает новый список((name-1 name-2 name-3) (1 2 3) (x y z) (4 5 6) (7 8 9) (a b c))
.(ins-after-row '((name-1 name-2 name-3) (1 2 3) (4 5 6) (7 8 9) (a b c)) '(x y z) 1)
В этом примере функцияins-after-row
будет вызвана с аргументамиmatr = '((name-1 name-2 name-3) (1 2 3) (4 5 6) (7 8 9) (a b c))
,row = '(x y z)
иn = 1
. Посколькуn
больше 0, функция рекурсивно вызывает саму себя с аргументамиcdr matr = '(4 5 6)
иn = (- n 1) = 0
. Затем функция возвращает новый список((name-1 name-2 name-3) (x y z) (4 5 6) (7 8 9) (a b c))
.(ins-after-row '((name-1 name-2 name-3) (1 2 3) (4 5 6) (7 8 9) (a b c)) '(x y z) 0)
В этом примере функцияins-after-row
будет вызвана с аргументамиmatr = '((name-1 name-2 name-3) (1 2 3) (4 5 6) (7 8 9) (a b c))
,row = '(x y z)
иn = 0
. Посколькуn
равно 0, функция возвращает новый список((name-1 name-2 name-3) (x y z) (1 2 3) (4 5 6) (7 8 9) (a b c))
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д