Работа со списками - 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))
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д